如何使用 CPack 生成 WIX 包?

How to with CPack generate the WIX package?

我用的是cmake 3.12.0。存在一个创建一个控制台应用程序的 cmake 项目。我为该 cmake 项目添加了包生成功能:

# ... above cmake code for one console application creation
# below code that I add:

# pack
set (A_PACK_DESCRIPTION_SUMMARY "${PROJECT_NAME} - CMake Assistant Solution")
set (A_INSTALL_PREFIX Consolas)

set(CPACK_WIX_PRODUCT_GUID "F9AAAAE2-D6AF-4EA4-BF46-B3E265400CC8") 
set(CPACK_WIX_UPGRADE_GUID "F9AAAAE2-D6AF-4EA4-BF46-B3E265400CC7")

set(CPACK_GENERATOR "WIX")

include(CPack)

使用其他生成器(NSIS、7Z、ZIP、DEB)一切正常,但使用 WIX 时出现以下错误:

...path\files.wxs(11) : error LGHT0091 : Duplicate symbol 'Component:CM_C_EMPTY_INSTALL_ROOT' found. This typically means that an Id is duplicated. Check to make sure all your identifiers of a given type (File, Component, Feature) are unique.

为什么会发生以及如何解决?

如果有帮助的话,我遇到了这个问题,发现我的 INSTALL 命令仅指定了发布配置,但随后尝试使用调试构建配置构建包。通过切换到构建指定发布配置的包,一切都按预期进行(在我弄明白之前浪费了一个下午的大部分时间!)

这似乎是由 this bug

引起的

基本上你使用 add_subdirectory(xxx EXCLUDE_FROM_ALL) 子目录有一个 install(... COMPONENT ...) 调用。已安装的文件已从子目录中排除,但仍会创建 COMPONENTs,现在为空并中断 wix。

作为解决方法,您可以添加:

set(CPACK_COMPONENTS_ALL Unspecified)

CMakeLists.txt 中排除所有空组件。