如何用CPack生成WIX包?

时间:2018-08-06 08:13:55

标签: cmake wix installer packaging cpack

我使用了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):错误LGHT0091:找到重复的符号'Component:CM_C_EMPTY_INSTALL_ROOT'。这通常意味着Id是重复的。检查以确保您给定类型(文件,组件,功能)的所有标识符都是唯一的。

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

2 个答案:

答案 0 :(得分:1)

这似乎是由this bug

引起的

基本上,您使用add_subdirectory(xxx EXCLUDE_FROM_ALL),其中子目录具有install(... COMPONENT ...)调用。已安装的文件从子目录中排除,但仍会创建COMPONENT,这些文件现在为空并破坏了wix。

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

set(CPACK_COMPONENTS_ALL Unspecified)
CMakeLists.txt

排除所有空组件。

答案 1 :(得分:0)

如果有帮助,我会遇到此问题,发现我有仅指定发布配置的INSTALL命令,然后尝试使用Debug构建配置来构建软件包。通过仅切换到构建指定Release配置的程序包,一切都按预期进行了(在我弄清楚这一点之前,浪费了整个下午的时间!)