CPack 一次构建多个包的问题

Posted

技术标签:

【中文标题】CPack 一次构建多个包的问题【英文标题】:Problems with CPack building multiple packages at once 【发布时间】:2017-04-03 12:33:27 【问题描述】:

我在使用 CPackCMake 3.7.2 的包装时遇到问题。

我尝试构建三个不同的包,MSI(通过WIX)、IFWZIP

根据文档,我在CMakeLists.txt 中设置了以下变量(以及更多需要的变量):

set(CPACK_WIX_ROOT "C:/Temp/WiX-3.10/binaries")
set(QTIFWDIR "$GLOBAL/Qt/Tools/QtInstallerFramework/2.0/bin")
set(CPACK_GENERATOR "WIX;IFW;ZIP")

在定义任何组件之前,我将CPack 包含在最后可能的位置。

<all variables have been defined before this point>
include(CPack)
include(CPackWIX)
include(CPackIFW)

cpack_add_component(AppBinaries DISPLAY_NAME "MyAppBinaries" DESCRIPTION "My Application Binaries")
cpack_ifw_configure_component(AppBinaries VERSION $CPACK_PACKAGE_VERSION SCRIPT "$CMAKE_SOURCE_DIR/cpack/installscript.qs")
cpack_add_component(AppDocs DISPLAY_NAME "MyAppDocs" DESCRIPTION "My Application Docs")
cpack_add_component(AppData DISPLAY_NAME "MyAppData" DESCRIPTION "My Application Data")

创建构建目录并从那里运行之后

cmake -G "Visual Studio 14 2015 Win64" ..\TestProject

生成文件CMakeCache.txtCPackConfig.cmakeCPackSourceConfig.cmakeCPackProperties.cmake

当运行cpack -C Release 同时构建所有三个安装程序时,第一个 (WIX) 已构建,但第二个 (QtIFW) 失败并显示消息

CPack 错误:找不到 QtIFW 编译器“binarycreator”:可能是 未安装,或不在您的 PATH CPack 错误:无法初始化 生成器 IFW

我检查了CMakeCache.txt 文件,但发现以下条目定义正确:

//QtIFW binarycreator command line client
CPACK_IFW_BINARYCREATOR_EXECUTABLE:FILEPATH=N:/Global/Qt/Tools/QtInstallerFramework/2.0/bin/binarycreator.exe
//QtIFW devtool command line client
CPACK_IFW_DEVTOOL_EXECUTABLE:FILEPATH=N:/Global/Qt/Tools/QtInstallerFramework/2.0/bin/devtool.exe
//QtIFW installer executable base
CPACK_IFW_INSTALLERBASE_EXECUTABLE:FILEPATH=N:/Global/Qt/Tools/QtInstallerFramework/2.0/bin/installerbase.exe
//QtIFW repogen command line client
CPACK_IFW_REPOGEN_EXECUTABLE:FILEPATH=N:/Global/Qt/Tools/QtInstallerFramework/2.0/bin/repogen.exe
//Enable to build 7-Zip source packages
CPACK_SOURCE_7Z:BOOL=ON
//Enable to build ZIP source packages
CPACK_SOURCE_ZIP:BOOL=ON
//Path to a program.
CPACK_WIX_CANDLE_EXECUTABLE:FILEPATH=C:/Temp/WiX-3.10/binaries/candle.exe
//Path to a program.
CPACK_WIX_LIGHT_EXECUTABLE:FILEPATH=C:/Temp/WiX-3.10/binaries/light.exe

但是当我检查CPack\*Config.cmake 文件时,上面的条目都没有被引用。第二次运行cmake -G "Visual Studio 14 2015 Win64" ..\TestProject 后一切正常;所有这些条目都在CPack\*Config.cmake 文件中引用,并且可以构建所有三个安装程序。

所以我真的被困在这一点上。

任何想法可能是什么问题以及如何避免它?

【问题讨论】:

【参考方案1】:

我终于弄清楚了什么没有按预期工作。 QTIFWDIR 变量的设置不会保存到CPack*Config.cmake 文件中,但CMAKE_WIX_ROOT 变量会保存。 CPack 似乎在运行时评估了这些变量。因此WIX 构建成功运行,但IFW 构建抱怨缺少二进制创建器。添加具有当前设置的变量使一切都按预期运行。

跟进:

根据维护者QTIFWDIR 应该是一个环境变量而不是CMake 变量。而CPACK_WIX_ROOT 被认为是一个内部CPack 变量。您需要安装WIX(如果安装尚未完成,请手动设置WIX 环境变量)。

【讨论】:

以上是关于CPack 一次构建多个包的问题的主要内容,如果未能解决你的问题,请参考以下文章

CPack 尝试构建所有目标

cmake/cpack 组件 debuginfo rpm 包没有出现

R语言使用caretEnsemble包的caretList函数一次性构建多个机器学习模型并使用caret包的resamples函数比较在同一数据集上多个机器学习模型的比较结果

从 CPack 构建中删除 Catkin 工件

CPack打包多个包

CPack:如何执行多个 CPACK_NSIS_EXTRA_INSTALL_COMMANDS?