CPack一次构建多个包的问题

时间:2017-04-03 12:33:28

标签: cmake cpack

我在使用CPack和CMake 3.7.2的包装时遇到了问题。

我尝试构建三个不同的包,MSI(通过WIX),IFW和ZIP。

根据文档,我在我的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.txt,CPackConfig.cmake,CPackSourceConfig.cmake和CPackProperties.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 个答案:

答案 0 :(得分:0)

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

关注

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