同时使用 CMAKE_INSTALL_PATH 和 CPack WiX 生成器
Using both CMAKE_INSTALL_PATH and CPack WiX generator
我正在尝试使用 CPack WiX 生成器生成 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 似乎尝试 make 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 生成器的用法?或者这是 Visual Studio 特有的?或者是否有解决此问题的方法,例如强制 DESTDIR
为空(是的,我知道这很危险)?
我真的是对CPack的用法有些误解。在阅读了一些关于 CPack 的信息后,我设法通过以下方式创建了一个 msi-package。
对于基于 Windows 的软件包安装,我通过将 CPACK_SET_DESTDIR
设置为 FALSE 来关闭 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}"
。如果我将 CPACK_PACKAGE_NAME
设置为 "my-project"
并将 CPACK_PACKAGE_VERSION
设置为 1.0.0
.
,则完整安装路径为 C:/Program Files/my-project 1.0.0/My Project
因此,要构建一个将程序安装到 C:\Program files\My Project
的 msi 包,我在 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
好像默认是空的,所以最后一行多余了
我正在尝试使用 CPack WiX 生成器生成 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 似乎尝试 make 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 生成器的用法?或者这是 Visual Studio 特有的?或者是否有解决此问题的方法,例如强制 DESTDIR
为空(是的,我知道这很危险)?
我真的是对CPack的用法有些误解。在阅读了一些关于 CPack 的信息后,我设法通过以下方式创建了一个 msi-package。
对于基于 Windows 的软件包安装,我通过将 CPACK_SET_DESTDIR
设置为 FALSE 来关闭 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}"
。如果我将 CPACK_PACKAGE_NAME
设置为 "my-project"
并将 CPACK_PACKAGE_VERSION
设置为 1.0.0
.
C:/Program Files/my-project 1.0.0/My Project
因此,要构建一个将程序安装到 C:\Program files\My Project
的 msi 包,我在 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
好像默认是空的,所以最后一行多余了