我想在构建过程中自动生成安装程序,并在构建时对其进行一些控制 . 如何设置make目标以使用qmake生成安装程序?
我有一个包含多个组件的 subdirs 项目 . 安装程序配置位于子目录(“installer-qt”)中 . 需要将文件复制到安装程序包的数据目录,然后自动运行安装程序生成器 . 除了内置的二进制文件,我还想安装文档, Headers 和其他资源 .
subdirs
这就是我想出来的 .
使用 make install :将其添加到子项目:
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 INSTALL_PREFIX=/my/prefix 运行qmake时指定前缀,或者在使用 qmake CONFIG+=package_build 运行qmake时指定复制到安装程序包
qmake INSTALL_PREFIX=/my/prefix
qmake CONFIG+=package_build
(未解决的问题:如何在不覆盖正常的' 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
这足以在子目录中运行' make package ',但我们希望从顶级构建目录运行它 . 为此,将其添加到顶级子目录项目:
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
现在,您可以从构建目录运行“ qmake CONFIG+= package_build /path/to/project.pro && make package ”来构建安装程序 . 将此添加到QtCreator部署配置,方法是转到“添加部署步骤”>“制作并输入”“创建参数”的“包” .
qmake CONFIG+= package_build /path/to/project.pro && make package
资源:
https://evileg.com/en/post/164/
http://doc.qt.io/qt-5/qmake-advanced-usage.html#adding-custom-targets
1 回答
这就是我想出来的 .
步骤1:将文件复制到安装程序包
使用
make install
:将其添加到子项目:现在,您可以在运行qmake时使用默认/ opt安装,在使用
qmake INSTALL_PREFIX=/my/prefix
运行qmake时指定前缀,或者在使用qmake CONFIG+=package_build
运行qmake时指定复制到安装程序包(未解决的问题:如何在不覆盖正常的'
make install
'的情步骤2:构建安装程序包
在installer-qt中添加一个qmake .pro项目:
这足以在子目录中运行'
make package
',但我们希望从顶级构建目录运行它 . 为此,将其添加到顶级子目录项目:现在,您可以从构建目录运行“
qmake CONFIG+= package_build /path/to/project.pro && make package
”来构建安装程序 . 将此添加到QtCreator部署配置,方法是转到“添加部署步骤”>“制作并输入”“创建参数”的“包” .资源:
https://evileg.com/en/post/164/
http://doc.qt.io/qt-5/qmake-advanced-usage.html#adding-custom-targets