Qt C++项目集成QML库编译Android平台时出现make: No rule to make target 'install'错误求助
Android编译错误:
make: *** No rule to make target 'install'. Stop. 解决方案 这个错误的核心原因是你的.pro文件仅为Linux(unix)和Windows平台配置了INSTALLS规则,但没有针对Android平台做适配。Qt在Android构建时会执行"Copy application data"步骤,尝试触发install目标,但此时没有对应的规则,导致make报错。
修复步骤
区分桌面平台与Android平台的安装路径
桌面平台(Linux/Windows)的QML插件需要安装到系统的QT_INSTALL_QML目录,但Android平台的插件必须打包到APK的assets/qml/[你的插件URI]目录下,不能使用系统路径。修改
.pro文件的INSTALLS配置
将原有的unix分支改为unix:!android(排除Android),然后新增android专属配置块,设置正确的安装路径:
TEMPLATE = lib TARGET = IracemaCharts QT += qml quick CONFIG += plugin c++11 qmltypes QML_IMPORT_NAME = IracemaCharts QML_IMPORT_MAJOR_VERSION = 0 QML_IMPORT_MINOR_VERSION = 1 TARGET = $$qtLibraryTarget($$TARGET) uri = IracemaCharts # Input SOURCES += \ iracemalineseries.cpp \ iracemacharts_plugin.cpp \ iracemacharts.cpp \ iracemalineseriesview.cpp HEADERS += \ iracemalineseries.h \ iracemacharts_plugin.h \ iracemacharts.h \ iracemalineseriesview.h DISTFILES = qmldir !equals(_PRO_FILE_PWD_, $$OUT_PWD) { copy_qmldir.target = $$OUT_PWD/qmldir copy_qmldir.depends = $$_PRO_FILE_PWD_/qmldir copy_qmldir.commands = $(COPY_FILE) "$$replace(copy_qmldir.depends, /, $$QMAKE_DIR_SEP)" "$$replace(copy_qmldir.target, /, $$QMAKE_DIR_SEP)" QMAKE_EXTRA_TARGETS += copy_qmldir PRE_TARGETDEPS += $$copy_qmldir.target } qmldir.files = qmldir qmldir.files += plugins.qmltypes # 桌面Linux平台配置 unix:!android { installPath = $$[QT_INSTALL_QML]/$$replace(uri, \., /) qmldir.path = $$installPath target.path = $$installPath copy_qmltypes.path = $$installPath copy_qmltypes.files = $$OUT_PWD/plugins.qmltypes INSTALLS += target qmldir copy_qmltypes } # Windows平台配置 windows { installPath = $$[QT_INSTALL_QML]/$$replace(uri, \., /) installPath = $$replace(installPath, /, \\) qmldir.path = $$installPath target.path = $$installPath copy_qmltypes.path = $$installPath copy_qmltypes.files = $$OUT_PWD/plugins.qmltypes INSTALLS += target qmldir copy_qmltypes } # Android平台配置 android { # 插件将被复制到APK的assets/qml/IracemaCharts目录 installPath = $$OUT_PWD/assets/qml/$$replace(uri, \., /) qmldir.path = $$installPath target.path = $$installPath copy_qmltypes.path = $$installPath copy_qmltypes.files = $$OUT_PWD/plugins.qmltypes INSTALLS += target qmldir copy_qmltypes }
额外检查点
- 确认你的
qmldir文件内容正确,比如包含插件的名称和库文件名:module IracemaCharts plugin libIracemaCharts # Android下会自动适配为libIracemaCharts.so - 清理项目后重新构建(Qt Creator中点击"Build > Clean All",再重新构建),避免旧的构建缓存干扰。
这样修改后,Android构建时会生成正确的install规则,将插件文件复制到APK的assets目录中,解决编译错误。
内容的提问来源于stack exchange,提问作者Isaac Gondim
相关产品推荐
相关产品推荐

