如何用 CPack 生成 WIX 包?
Posted
技术标签:
【中文标题】如何用 CPack 生成 WIX 包?【英文标题】:How to with CPack generate the WIX package? 【发布时间】:2018-08-06 08:13:54 【问题描述】:我使用的是 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:找到重复的符号“组件:CM_C_EMPTY_INSTALL_ROOT”。这通常意味着一个 Id 是重复的。检查以确保给定类型(文件、组件、功能)的所有标识符都是唯一的。
为什么会发生以及如何解决?
【问题讨论】:
【参考方案1】:这似乎是由this bug引起的
基本上你使用add_subdirectory(xxx EXCLUDE_FROM_ALL)
,其中子目录有一个install(... COMPONENT ...)
调用。已安装的文件会从子目录中排除,但仍会创建 COMPONENT
s,它们现在是空的并且会破坏 wix。
作为一种解决方法,您可以添加:
set(CPACK_COMPONENTS_ALL Unspecified)
在CMakeLists.txt
中排除所有空组件。
【讨论】:
【参考方案2】:如果有帮助的话,我遇到了这个问题,发现我有只指定发布配置的 INSTALL 命令,但随后尝试使用调试构建配置来构建包。通过切换到构建指定发布配置的包,一切都按预期进行(浪费了一个下午的大部分时间才弄清楚这一点!)
【讨论】:
我检查了这个,但它对所有操作(构建、测试、打包)都使用了发布配置 scipt 版本。以上是关于如何用 CPack 生成 WIX 包?的主要内容,如果未能解决你的问题,请参考以下文章