visual-studio-2015 - 同时使用 CMAKE_INSTALL_PATH 和 CPack WiX 生成器

标签 visual-studio-2015 wix cpack

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

在我的 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" 并且错误为:

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 试图使 DESTDIR="D:/Projects/build-Project-MSVC2015/_CPack_Packages/win64/WIX/project-2.3.0-20.AMD64/core"安装作为中间步骤,但如 cmake's documentation 中所述:

WARNING: DESTDIR may not be used on Windows because installation prefix usually contains a drive letter like in “C:/Program Files” which cannot be prepended with some other prefix.

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

最佳答案

我确实对CPack的用法有些误解。在阅读了有关 CPack 的一些信息后,我设法通过以下方式创建了一个 msi 包。

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

如 cmake 文档 CPACK_SET_DESTDIR 中所述:

The most noticeable difference is that without CPACK_SET_DESTDIR, CPack uses CPACK_PACKAGING_INSTALL_PREFIX as a prefix whereas with CPACK_SET_DESTDIR set, CPack will use CMAKE_INSTALL_PREFIX as a 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_VERSION1.0.0 .

因此,要构建一个 msi 软件包,将程序安装到 C:\Program files\My Project ,我在 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默认情况下好像是空的,所以最后一行是多余的。

关于visual-studio-2015 - 同时使用 CMAKE_INSTALL_PATH 和 CPack WiX 生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44330019/

相关文章:

c++ - OpenGL-如何移动打印线?

WiX/刻录 : Set Uninstall screen information

installation - Windows 安装程序包的问题

cmake - 构建项目后运行 CPack 时出现奇怪的错误。

c++ - Windows 10 中的跳转列表失败

visual-studio-2015 - 添加 “Examples:”时出现Specflow自定义工具错误

wix 3.6 刻录功能树以选择要安装的 MSI

使用 CMake 压缩 zip 文件?

cmake - 如何获取安装 CMake 组件时将安装的文件列表

c++ - nuget 引用 c++ header