Reputation: 6764
I'm facing problems using the packaging with CPack
and CMake 3.7.2
.
I try to build three different packages, MSI
(via WIX
), IFW
, and ZIP
.
According to the documentation I set the following variables in my CMakeLists.txt
(and a few more which are required):
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")
I'm including CPack
at the last possible position before any components are defined.
<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")
After creating the build dir and running from there
cmake -G "Visual Studio 14 2015 Win64" ..\TestProject
the files CMakeCache.txt
, CPackConfig.cmake
, CPackSourceConfig.cmake
, and CPackProperties.cmake
are generated.
When running cpack -C Release
to build all three installers at once, the first one (WIX
) is built, but the second one (QtIFW
) fails with the messages
CPack Error: Cannot find QtIFW compiler "binarycreator": likely it is not installed, or not in your PATH CPack Error: Cannot initialize the generator IFW
I inspected the CMakeCache.txt
file but found the following entries properly defined:
//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
But when I checked the CPack\*Config.cmake
files none of the entries above are referenced. After running the cmake -G "Visual Studio 14 2015 Win64" ..\TestProject
a second time everything is fine; all those entries are referenced in CPack\*Config.cmake
files and all three installers can be built.
So I really get stuck at this point.
Any ideas what could be the issue and how to avoid it?
Upvotes: 2
Views: 2179
Reputation: 6764
I finally figured out what didn't work as expected. The setting of the QTIFWDIR
variable is not saved to the CPack*Config.cmake
files, but the CMAKE_WIX_ROOT
variable is. Those variables seem to be evaluated at runtime by CPack
. Therefore the WIX
build run successfully but the IFW
build complained about a the missing binarycreator. Adding the variable with its current setting made everything run as expected.
Follow up:
According to the maintainer QTIFWDIR
should be rather an environment variable than a CMake
variable. And CPACK_WIX_ROOT
is considered to be an internal CPack
variable. You need to install WIX
(and set the WIX
environment variable manually, if it hasn't already been done by the installation).
Upvotes: 2