为啥CPack会生成一个空包?

Posted

技术标签:

【中文标题】为啥CPack会生成一个空包?【英文标题】:Why CPack generates an empty package?为什么CPack会生成一个空包? 【发布时间】:2018-08-05 20:37:29 【问题描述】:

存在一个创建一个控制台应用程序的 cmake 项目。 我在那个 cmake 项目中添加了包生成的能力:

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

#install
install(TARGETS $PROJECT_NAME RUNTIME DESTINATION "C:/Apps/Consolas" COMPONENT applications)

# pack
set(CPACK_PACKAGE_NAME $PROJECT_NAME)
set(CPACK_PACKAGE_VENDOR "MyOrg")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "CPack Component Installation Example")
set(CPACK_PACKAGE_VERSION "1.0.0")

set(CPACK_GENERATOR "ZIP")

include(CPack)

包创建通过,没有任何错误,(!)但包是空的。

为什么会发生这种情况以及如何解决这个问题? (我用的是cmake 3.12.0)

【问题讨论】:

您没有将组件添加到您的包中,即cpack_add_component(applications DISPLAY_NAME "Apps" DESCRIPTION "describe whats in the package") @vre,在最后一行“include(CPack)”之前,我包括了两行:“include(CPackComponent)”,正如你所写的“cpack_add_component(applications DISPLAY_NAME "Apps"DESCRIPTION"描述包中的内容“)”。包生成通过没有任何错误,但包仍然是空的:( 【参考方案1】:

DESTINATION 应该是包内的相对目录。

请考虑以下情况:

install(TARGETS $PROJECT_NAME RUNTIME DESTINATION "bin" COMPONENT applications)

解释:CPack 将在将项目安装到<build-dir>/_CPack_Packages 的子目录后创建 ZIP 文件。通过指定绝对路径,在预期的子目录中不会安装任何文件,并且包为空。

【讨论】:

以上是关于为啥CPack会生成一个空包?的主要内容,如果未能解决你的问题,请参考以下文章

如何让 cpack 生成正确的开始菜单快捷方式

如何用 CPack 生成 WIX 包?

更改组件 RPM 的 cpack 生成名称

CPack 将系统目录添加到生成的 RPM

在 Windows 上使用 CPack 生成源代码包

防止 cmake 运行 cpack