仅在 CPack 中将文件添加到 ARCHIVE 包
Adding files to ARCHIVE packages only in CPack
是否可以使用 CMake/CPack 将一些文件仅添加到 ARCHIVE 生成器?显然组件会那样做,但我不知道怎么说 "only add component X to generator Y"。我做了这样的事情:
INSTALL(FILES somefile DESTINATION "." COMPONENT static)
但是如何将 static
组件仅添加到 ARCHIVE 而不添加到其他生成器,如 DEB 和 RPM?
最终在 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()
我就是这样解决这个问题的,我想将 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)
是否可以使用 CMake/CPack 将一些文件仅添加到 ARCHIVE 生成器?显然组件会那样做,但我不知道怎么说 "only add component X to generator Y"。我做了这样的事情:
INSTALL(FILES somefile DESTINATION "." COMPONENT static)
但是如何将 static
组件仅添加到 ARCHIVE 而不添加到其他生成器,如 DEB 和 RPM?
最终在 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()
我就是这样解决这个问题的,我想将 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)