Добавление файлов в пакеты АРХИВА только в CPack

Можно ли добавить некоторые файлы только в генераторы АРХИВА с помощью CMake/CPack? По-видимому, это делают компоненты, но я не могу понять, как сказать «добавлять только компонент X в генератор Y». Я сделал что-то вроде этого:

INSTALL(FILES somefile DESTINATION "." COMPONENT static)

Но как добавить компонент static только в АРХИВЫ, а не в другие генераторы, такие как DEB и RPM?


person brunobg    schedule 08.09.2015    source источник


Ответы (2)


В конце концов нашел это с некоторой помощью из списка 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()
person brunobg    schedule 25.09.2015

Вот как я решил этот вопрос, где я хотел установить файлы 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)
person Mike T    schedule 11.05.2020