Makefile error 当我想为 android 构建项目时

Makefile error When I want to build the project for android

我有一个 SubDirs 项目,其中有一个 Qt Quick Application 和几个静态链接到 Qt 的 c++ 库项目 Application.But 我有一个问题在下面。

Qt version: Qt 5.14.2

Qt Kit for android is not showing any problem.

I don't have any problem in windows ,And the project will run on windows with no error

I able to run simple Qt Quick Application(Scroll,Stack and other that is in template) on my android device but When I add the c++ libraries and add link to application this error will happen.

错误

:-1: error: [install_target] Error 1

编译输出


12:18:32: The process "D:\SDK\ndk-bundle\prebuilt\windows-x86_64\bin\make.exe" exited normally.
12:18:32: Starting: "D:\SDK\ndk-bundle\prebuilt\windows-x86_64\bin\make.exe" "INSTALL_ROOT=D:\build-MySubdirProName-Android_for_armeabi_v7a_arm64_v8a_x86_x86_64_Clang_Qt_5_14_2_for_Android-Debug\android-build" install
cd JooyaAndroid\ && ( if not exist Makefile C:\Qt.14.2\android\bin\qmake.exe -o Makefile D:\QtProjects\JooyaAndroid\JooyaAndroid.pro -spec android-clang "CONFIG+=debug" "CONFIG+=qml_debug" "ANDROID_ABIS=armeabi-v7a" ) && D:/SDK/ndk-bundle/prebuilt/windows-x86_64/bin/make -f Makefile install
make[1]: Entering directory 'D:/build-MySubdirProName-Android_for_armeabi_v7a_arm64_v8a_x86_x86_64_Clang_Qt_5_14_2_for_Android-Debug/JooyaAndroid'
The filename, directory name, or volume label syntax is incorrect.
make[1]: *** [Makefile:1068: install_target] Error 1
make[1]: Leaving directory 'D:/build-MySubdirProName-Android_for_armeabi_v7a_arm64_v8a_x86_x86_64_Clang_Qt_5_14_2_for_Android-Debug/JooyaAndroid'
make: *** [Makefile:74: sub-JooyaAndroid-install_subtargets] Error 2
12:18:34: The process "D:\SDK\ndk-bundle\prebuilt\windows-x86_64\bin\make.exe" exited with code 2.
Error while building/deploying project MySubdirProName(kit: Android for armeabi-v7a,arm64-v8a,x86,x86_64 (Clang Qt 5.14.2 for Android))
When executing step "Copy application data"
12:18:34: Elapsed time: 00:33.

我认为错误与 Makefile 有关 file.Can 有人说我该如何解决这个问题?

编辑

我插入了一些 Makefile 行以获取有关该错误的更多信息:


1065 ####### Install
1066 
1067 install_target: all FORCE
1068    @if not exist C:$(INSTALL_ROOT:@msyshack@%=%)\Qt.14.2\android\plugins\generic mkdir C:$(INSTALL_ROOT:@msyshack@%=%)\Qt.14.2\android\plugins\generic & if not exist C:$(INSTALL_ROOT:@msyshack@%=%)\Qt.14.2\android\plugins\generic exit 1
1069    $(QINSTALL) $(TARGET) C:$(INSTALL_ROOT:@msyshack@%=%)\Qt.14.2\android\plugins\generic$(TARGET)
1070    $(RANLIB) C:$(INSTALL_ROOT:@msyshack@%=%)\Qt.14.2\android\plugins\generic$(TARGET)
1071 
1072 uninstall_target: FORCE
1073    -$(DEL_FILE) C:$(INSTALL_ROOT:@msyshack@%=%)\Qt.14.2\android\plugins\generic$(TARGET)
1074    -$(DEL_DIR) C:$(INSTALL_ROOT:@msyshack@%=%)\Qt.14.2\android\plugins\generic 

关于第 1068 行的更多信息是,C:\Qt.14.2\android\plugins\ 中有多个文件夹,但 generic 文件夹不存在。

编辑 2

经过几天的尝试,我实现了一个小型 success.I 可以构建 subdirs 项目,其中有一个 C++ Library 和一个 Qt Quick Application 用于 Android如下:

1-在 C++ 库 pro 文件中,我首先进行了以下配置 我构建了项目,但出现了以上错误:

QT -= gui

TEMPLATE = lib
CONFIG += staticlib

CONFIG += c++11

DEFINES += QT_DEPRECATED_WARNINGS


SOURCES += \
    summer.cpp

HEADERS += \
    summer.h

# Default rules for deployment.
unix {
    target.path = $$[QT_INSTALL_PLUGINS]/generic
}
!isEmpty(target.path): INSTALLS += target

2- 然后我修改了 pro 文件,如下所示:

CONFIG += dll

3- 我按下构建按钮,项目成功构建并且 Apk 文件位于输出文件夹中

但是我不知道happeing.Given上面是什么,我想知道如何解决我的问题。

当我在没有使用 Config += staticlib 构建项目的情况下更改 Config += dll 时,会出现以下错误,如果没有先 staticlib 然后 dll 配置,项目将无法构建!

:-1: error: No rule to make target 'D:\QtProjects\MyQtProjects\build-FirstSubdirProject-Android_for_armeabi_v7a_arm64_v8a_x86_x86_64_Clang_QtForAndroid_32ca93-Debug\FirstQtQuickApp\..\MyFirstLibrary\libMyFirstLibrary.a', needed by 'libFirstQtQuickApp_armeabi-v7a.so'.  Stop.
The filename, directory name, or volume label syntax is incorrect.

检查你的文件名。可能是由于路径错误文件(源或对象)太长。这种错误只出现在windows,对于基于unix的系统,没有这种限制。

这个错误也是由于参数列表太长造成的(e.g. too long objects to be linked)

我找到了解决方案,当我在 Qt Creator 中创建一个新的 C++ 库项目时,它会创建一个包含以下内容的 pro 文件

QT -= gui

TEMPLATE = lib
CONFIG += staticlib

CONFIG += c++11

DEFINES += QT_DEPRECATED_WARNINGS


SOURCES += \
    testlibrary.cpp

HEADERS += \
    testlibrary.h

# Default rules for deployment.
unix {
    target.path = $$[QT_INSTALL_PLUGINS]/generic
}
!isEmpty(target.path): INSTALLS += target

我已经从 pro 文件中删除了以下内容所以问题已解决


# Default rules for deployment.
unix {
    target.path = $$[QT_INSTALL_PLUGINS]/generic
}
!isEmpty(target.path): INSTALLS += target