仅在 CPack 中将文件添加到 ARCHIVE 包

Posted

技术标签:

【中文标题】仅在 CPack 中将文件添加到 ARCHIVE 包【英文标题】:Adding files to ARCHIVE packages only in CPack 【发布时间】:2015-09-08 14:26:52 【问题描述】:

是否可以使用 CMake/CPack 仅将一些文件添加到 ARCHIVE 生成器?显然组件是这样做的,但我不知道怎么说“只将组件 X 添加到生成器 Y”。我做了这样的事情:

INSTALL(FILES somefile DESTINATION "." COMPONENT static)

但是如何将static 组件仅添加到 ARCHIVE 中而不添加到 DEB 和 RPM 等其他生成器中?

【问题讨论】:

【参考方案1】:

最终在 CMake 列表的帮助下找到了这个。在您的 CMakeLists.txt 中执行以下操作:

install(PROGRAMS basic.sh DESTINATION "." COMPONENT basic)
install(PROGRAMS optional.sh DESTINATION "." COMPONENT optional)

set(CPACK_PROJECT_CONFIG_FILE "$CMAKE_CURRENT_SOURCE_DIR/CPackOptions.cmake")

CPackOptions.cmake 应该处理 ifs。请注意,您必须为您可能需要的任何其他生成器打开 CPACK_*_COMPONENT_INSTALL:

SET(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
SET(CPACK_DEB_COMPONENT_INSTALL ON)
SET(CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE 1)

IF ("$CPACK_GENERATOR" MATCHES "TGZ")
   SET(CPACK_COMPONENTS_ALL basic optional)
ELSEIF ("$CPACK_GENERATOR" MATCHES "TBZ2")
   SET(CPACK_COMPONENTS_ALL basic optional)
ELSE()
   SET(CPACK_COMPONENTS_ALL basic)
ENDIF()

【讨论】:

【参考方案2】:

这就是我解决这个问题的方法,我想将 README 和 LICENSE 文件安装到 CPack 存档输出(ZIP、TGZ 等):

...
set(CPACK_RESOURCE_FILE_README "$CMAKE_SOURCE_DIR/README.md")
set(CPACK_RESOURCE_FILE_LICENSE "$CMAKE_SOURCE_DIR/LICENSE.txt")
set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
set(CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE ON)
install(FILES
  $CPACK_RESOURCE_FILE_README
  $CPACK_RESOURCE_FILE_LICENSE
  DESTINATION .
  COMPONENT Metadata
  EXCLUDE_FROM_ALL
)
include(CPack)

【讨论】:

以上是关于仅在 CPack 中将文件添加到 ARCHIVE 包的主要内容,如果未能解决你的问题,请参考以下文章

cpack:如何在安装过程中将程序与文件扩展名关联?

如何将变更日志添加到使用 CPack 创建的 RPM

向 cpack 添加额外的命令 - NSIS 打包程序/安装程序

如何在 azure python 应用服务中将目录添加到 PATH

使用 CMake 和 CPack 为一个组件创建包

将 fixup_bundle 结果添加到 CPack