我想在我的构建过程中自动生成安装程序,并控制它何时构建。如何设置 make 目标以使用 qmake 生成安装程序?
我有一个subdirs
包含多个组件的项目。安装程序配置位于子目录(“installer-qt”)中。需要将文件复制到安装程序包的数据目录,然后自动运行安装程序生成器。除了构建的二进制文件之外,我还想安装文档、标题和其他资源。
我想在我的构建过程中自动生成安装程序,并控制它何时构建。如何设置 make 目标以使用 qmake 生成安装程序?
我有一个subdirs
包含多个组件的项目。安装程序配置位于子目录(“installer-qt”)中。需要将文件复制到安装程序包的数据目录,然后自动运行安装程序生成器。除了构建的二进制文件之外,我还想安装文档、标题和其他资源。
这就是我想出的。
使用make install
:将其添加到子项目中:
package_build {
INSTALLER_PACKAGE=$$PWD/installer-qt/packages
INSTALL_PREFIX=$$INSTALLER_PACKAGE/com.example.component1/data
} else {
isEmpty(INSTALL_PREFIX): INSTALL_PREFIX="/opt/ExampleCorp"
}
message("Install to $$INSTALL_PREFIX")
unix {
target.path = "$$INSTALL_PREFIX/bin"
documentation.path = "$$INSTALL_PREFIX/doc"
includes.path = "$$INSTALL_PREFIX/include"
testcase|staticlib {
INSTALLS -= target
} else {
INSTALLS += target
INSTALLS += documentation
INSTALLS += includes
}
}
documentation.files += readme.txt
includes.files += header.h
现在你可以在运行 qmake 时使用默认的 /opt 安装,在运行 qmake 时指定前缀 using qmake INSTALL_PREFIX=/my/prefix
,或者在运行 qmake 时指定复制到安装程序包 usingqmake CONFIG+=package_build
(开放式问题:如何最好地将所有内容复制到安装程序数据而不覆盖正常的“<code>make install”?)
在installer-qt 中添加一个qmake .pro 项目:
TEMPLATE = subdirs # Empty project
CONFIG(release, debug|release) {
unix: INSTALLER_OFFLINE = $$PWD/MYPROJECT-linux-x64.run
win32: INSTALLER_OFFLINE = $$PWD/MYPROJECT-win32-x64.exe
}
CONFIG(debug, debug|release) {
unix: INSTALLER_OFFLINE = $$PWD/MYPROJECT-linux-x64-debug.run
win32: INSTALLER_OFFLINE = $$PWD/MYPROJECT-win32-x64-debug.exe
}
OTHER_FILES += $$PWD/config/config.xml \
$$PWD/packages/com.example.component1/meta/package.xml
# Create the target assembly Offline Installer
QTIFWDIR = $$(HOME)/Qt/QtIFW2.0.5
offlineInstaller.target = $$INSTALLER_OFFLINE
offlineInstaller.commands = $$QTIFWDIR/bin/binarycreator --offline-only \
-c $$PWD/config/config.xml -p $$PWD/packages $$offlineInstaller.target
offlineInstaller.depends = install
offlineInstallerTarget.target = package # This is the real name of the target
offlineInstallerTarget.depends = offlineInstaller
QMAKE_EXTRA_TARGETS += offlineInstaller offlineInstallerTarget
这足以在子目录中运行'<code>make package',但我们希望从顶级构建目录运行它。为此,请将其添加到顶级子目录项目:
SUBDIRS += installer-qt
offlineInstaller.target = package
offlineInstaller.depends = installer-qt mysubproject install
offlineInstaller.CONFIG = recursive
offlineInstaller.recurse = installer-qt
offlineInstaller.recurse_target = package
QMAKE_EXTRA_TARGETS += offlineInstaller
现在您可以从构建目录运行 '<code>qmake CONFIG+= package_build /path/to/project.pro && make package' 来构建安装程序。通过转到 Add Deploy Step > Make 并为“Make arguments”放入“package”,将其添加到 QtCreator 部署配置中。</p>
资源:
https://evileg.com/en/post/164/
http://doc.qt.io/qt-5/qmake-advanced-usage.html#adding-custom-targets