You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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报错。

修复步骤

  1. 区分桌面平台与Android平台的安装路径
    桌面平台(Linux/Windows)的QML插件需要安装到系统的QT_INSTALL_QML目录,但Android平台的插件必须打包到APK的assets/qml/[你的插件URI]目录下,不能使用系统路径。

  2. 修改.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 21:44:08