同时使用CMAKE_INSTALL_PATH和CPack WiX生成器

时间:2017-06-02 13:21:35

标签: visual-studio-2015 wix cpack

我正在尝试使用CPack WiX Generator生成msi-package。

在我的CMakeLists.txt中,CMAKE_INSTALL_PREFIX设置为"C:/Program Files/My Project"。我需要有完整的路径,因为项目源代码的一些重要部分依赖于这条路径。此外,我将项目拆分为一些组件,其中一个组件名为core

我使用cmake-gui成功生成了Visual Studio解决方案。但是当我尝试构建项目PACKAGE时,我收到以下错误:

53>EXEC : CPack error : Problem creating temporary directory: D:/Projects/build-Project-MSVC2015/_CPack_Packages/win64/WIX/project-2.3.0-20.AMD64/coreC:/Program Files/My Project

当我将CMAKE_INSTALL_PREFIX留空时,会发生同样的错误。在这种情况下,此变量默认初始化为"C:/Program Files/Project_Name",rror为:

53>EXEC : CPack error : Problem creating temporary directory: D:/Projects/build-Project-MSVC2015/_CPack_Packages/win64/WIX/project-2.3.0-20.AMD64/coreC:/Program Files/Project_Name

仅当我将CMAKE_INSTALL_PREFIX设置为My Project时(缺少前置C://),一切正常。该目录创建为D:/Projects/build-Project-MSVC2015/_CPack_Packages/win64/WIX/project-2.3.0-20.AMD64/coreMy Project并创建了msi-package。

看来,CPack尝试将make DESTDIR="D:/Projects/build-Project-MSVC2015/_CPack_Packages/win64/WIX/project-2.3.0-20.AMD64/core"安装为中间步骤,但正如cmake's documentation所述:

  

警告:DESTDIR可能不会在Windows上使用,因为安装前缀通常包含一个驱动器号,如“C:/ Program Files”中的驱动器号,不能添加其他前缀。

我是否误解了CMAKE_INSTALL_PREFIX与CPack WiX Generator的用法?或者这是特定于Visual Studio?或者是否有针对此问题的解决方法,例如强制DESTDIR为空(是的,我知道这很危险)?

1 个答案:

答案 0 :(得分:0)

我真的有点误解了CPack的用法。在阅读了有关CPack的一些信息后,我设法通过以下方式创建了一个msi-package。

对于基于Windows的软件包安装,我通过将CPACK_SET_DESTDIR设置为FALSE来关闭DESTDIR的使用。

正如cmake关于CPACK_SET_DESTDIR的文档中所述:

  

最显着的区别是没有CPACK_SET_DESTDIR,   CPack使用CPACK_PACKAGING_INSTALL_PREFIX作为前缀,而使用   CPACK_SET_DESTDIR设置,CPack将使用CMAKE_INSTALL_PREFIX作为   前缀。

也就是说,我应该将CPACK_PACKAGING_INSTALL_PREFIX变量设置为适当的值。

如果我将CPACK_PACKAGING_INSTALL_PREFIX设置为非空值,e。 G。到/My Project(注意领先的/),CPack会将此附加到C:/Program files/${CPACK_PACKAGE_INSTALL_DIRECTORY}。反过来,CPACK_PACKAGE_INSTALL_DIRECTORY默认为"${CPACK_PACKAGE_NAME} ${CPACK_PACKAGE_VERSION}"。如果我将C:/Program Files/my-project 1.0.0/My Project设置为CPACK_PACKAGE_NAME而将"my-project"设置为CPACK_PACKAGE_VERSION,则完整安装路径为1.0.0

因此,要构建一个将程序安装到C:\Program files\My Project的msi-package,我在CMakeLists.txt中使用以下行:

SET(CMAKE_INSTALL_PREFIX "C:/Program Files/My Project" CACHE PATH "Install path" FORCE)
...
SET(CPACK_SET_DESTDIR FALSE)
SET(CPACK_PACKAGE_INSTALL_DIRECTORY "My Project")
SET(CPACK_PACKAGING_INSTALL_PREFIX "")

对于WiX生成器CPACK_PACKAGE_INSTALL_DIRECTORY可能不包含完整路径,因此SET(CPACK_PACKAGE_INSTALL_DIRECTORY ${CMAKE_INSTALL_PREFIX})将无效。

CPACK_PACKAGING_INSTALL_PREFIX默认情况下似乎为空,因此最后一行是多余的。

相关问题