【问题标题】:Makefile error When I want to build the project for androidMakefile错误当我想为android构建项目时
【发布时间】:2020-05-05 04:56:09
【问题描述】:

我有一个 SubDirs 项目和一个 Qt Quick Application 和几个静态链接到 Qt 应用程序的 c++ 库项目。但我有一个问题在下面。

Qt 版本:Qt 5.14.2

Qt Kit for android 没有显示任何问题。

我在windows上没有任何问题,而且项目会在windows上运行没有错误

我能够在我的 android 设备上运行简单的 Qt Quick Application(Scroll、Stack 和其他模板中的),但是当我添加 c++ 库并添加应用程序的链接时,会发生此错误。

错误

:-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\5.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 文件有关。谁能说我该如何解决这个问题?

编辑

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


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

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

编辑 2

经过几天的尝试,我取得了小小的成功。我可以构建subdirs 项目,其中一个C++ Library 和一个Qt Quick Application for 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 文件在输出文件夹中

但我不知道发生了什么。鉴于上述情况,我想知道如何解决我的问题。

当我更改Config += dll 而不使用Config += staticlib 构建项目时,会出现以下错误,如果没有先配置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.

【问题讨论】:

  • D:/QtProjects/build-HokmBazi-Android_ARMv7-Release/JooyaQuickDesign 目录显然有问题。也许应该在配置中更改斜杠(改为反斜杠) - 它是 windows。
  • 错误信息告诉你错误发生在目录D:/build-MySubdirProName-Android_for_armeabi_v7a_arm64_v8a_x86_x86_64_Clang_Qt_5_14_2_for_Android-Debug/JooyaAndroid中Makefile的第1068行。我假设这个makefile是由qmake编写的。如果没有更多信息,我们无法告诉您更多信息。
  • @JohnBollinger 我编辑了这个问题,如果你想了解更多信息,我可以再次编辑这个问题。坦克你
  • @JohnBollinger 我已经第二次编辑了这个问题。你能帮我解决这个问题吗?
  • @mohsen,这些编辑很有帮助且适当,但它们表明您的特殊情况太厚了,其中包含来自 Windows / msys 构建环境和 qmake 的详细信息,我无法提供帮助。不过,赏金可能会引起一些关注。我确实觉得“@msyshack@”出现在整个 makefile 中很可疑。这让我觉得 qmake 构建该文件可能出了问题,但我对这个评估没有信心,也没有关于如何进一步调查的建议。

标签: android qt makefile qt-quick qtquickcontrols2


【解决方案1】:

我找到了解决方案,当我在 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

【讨论】:

    【解决方案2】:
    The filename, directory name, or volume label syntax is incorrect.
    

    检查您的文件名。可能是由于路径错误文件(源或对象)太长。此类错误仅存在于 windows 中,对于基于 unix 的系统,则没有此类限制。

    这个错误也是由于参数列表过长(e.g. too long objects to be linked

    【讨论】:

    • 不,这没有帮助,
    • @mohsen 尝试在带有 android studio 的 Ubunto VM 下构建。如果成功,这意味着一些平台问题(如上述之一)
    • 不,我在问题中提到过。我能够为 android 构建和运行简单的 qt quick 应用程序,它将在 android 设备上运行,所以如果路径和名称有问题,那么这个简单的应用程序不应该构建和运行
    • @mohsen 好的,抱歉。如果某个文件夹不存在并导致错误,这意味着之前的某个步骤没有成功完成(或者您忘记放置它)
    • 我已经测试了构建并使用更小的路径运行 => 我将 D:/build-MySubdirProName-Android_for_armeabi_v7a_arm64_v8a_x86_x86_64_Clang_Qt_5_14_2_for_Android-Debug 更改为 D:/build-MySubdirProName-AD
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    相关资源
    最近更新 更多