如何使用 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 ...)
调用。已安装的文件已从子目录中排除,但仍会创建 COMPONENT
s,现在为空并中断 wix。
作为解决方法,您可以添加:
set(CPACK_COMPONENTS_ALL Unspecified)
在 CMakeLists.txt
中排除所有空组件。
我用的是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 ...)
调用。已安装的文件已从子目录中排除,但仍会创建 COMPONENT
s,现在为空并中断 wix。
作为解决方法,您可以添加:
set(CPACK_COMPONENTS_ALL Unspecified)
在 CMakeLists.txt
中排除所有空组件。