CPack 一次构建多个包的问题
Problems with CPack building multiple packages at once
我在使用 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 Error: Cannot find QtIFW compiler "binarycreator": likely it is
not installed, or not in your PATH CPack Error: Cannot initialize the
generator 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
文件时 none 上面的条目被引用了。在 运行 第二次 cmake -G "Visual Studio 14 2015 Win64" ..\TestProject
之后一切正常; CPack\*Config.cmake
文件中引用了所有这些条目,并且可以构建所有三个安装程序。
所以我真的卡在这一点上了。
任何想法可能是什么问题以及如何避免它?
我终于弄清楚什么地方没有按预期工作。 QTIFWDIR
变量的设置不会保存到 CPack*Config.cmake
文件,但 CMAKE_WIX_ROOT
变量是。这些变量似乎在 运行 时间被 CPack
评估。因此 WIX
构建 运行 成功,但 IFW
构建抱怨缺少 binarycreator。添加变量及其当前设置使一切都如预期的那样 运行。
跟进:
根据维护者的说法,QTIFWDIR
应该是一个环境变量,而不是 CMake
变量。并且 CPACK_WIX_ROOT
被认为是内部 CPack
变量。您需要安装 WIX
(如果安装尚未完成,请手动设置 WIX
环境变量)。
我在使用 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 Error: Cannot find QtIFW compiler "binarycreator": likely it is not installed, or not in your PATH CPack Error: Cannot initialize the generator 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
文件时 none 上面的条目被引用了。在 运行 第二次 cmake -G "Visual Studio 14 2015 Win64" ..\TestProject
之后一切正常; CPack\*Config.cmake
文件中引用了所有这些条目,并且可以构建所有三个安装程序。
所以我真的卡在这一点上了。
任何想法可能是什么问题以及如何避免它?
我终于弄清楚什么地方没有按预期工作。 QTIFWDIR
变量的设置不会保存到 CPack*Config.cmake
文件,但 CMAKE_WIX_ROOT
变量是。这些变量似乎在 运行 时间被 CPack
评估。因此 WIX
构建 运行 成功,但 IFW
构建抱怨缺少 binarycreator。添加变量及其当前设置使一切都如预期的那样 运行。
跟进:
根据维护者的说法,QTIFWDIR
应该是一个环境变量,而不是 CMake
变量。并且 CPACK_WIX_ROOT
被认为是内部 CPack
变量。您需要安装 WIX
(如果安装尚未完成,请手动设置 WIX
环境变量)。