CMake + CPack: установить весь каталог (включая подпапки)

Я пытаюсь создать установочный пакет с помощью CMake и CPack. Все работает нормально, но я хотел бы значительно сократить объем кода, полностью скопировав папку ресурсов одним вызовом, а не по одному для каждой подпапки.

Пока что я делаю покомпонентную установку следующим образом:

set(RESOURCES_CALIBRATION_DIR resources/calibration)
file(GLOB RESOURCES_CALIBRATION "${CMAKE_SOURCE_DIR}/${RESOURCES_CALIBRATION_DIR}/*")
install(FILES ${RESOURCES_CALIBRATION} DESTINATION ${RESOURCES_CALIBRATION_DIR} COMPONENT ResourcesCalibration)

set(RESOURCES_CURSORS_DIR resources/cursors)
file(GLOB RESOURCES_CURSORS "${CMAKE_SOURCE_DIR}/${RESOURCES_CURSORS_DIR}/*")
install(FILES ${RESOURCES_CURSORS} DESTINATION ${RESOURCES_CURSORS_DIR} COMPONENT ResourcesCursors)

...
    ... (repeat for every folder of my resources folder)

set(CPACK_COMPONENTS_ALL applications ResourcesCalibration ResourcesCursors ...)
set(CPACK_COMPONENT_RESOURCESCALIBRATION_GROUP "resources")
set(CPACK_COMPONENT_RESOURCESCURSORS_GROUP "resources")
...
    ...

Есть ли чистый способ скопировать / установить всю папку ресурсов, включая все подпапки?


person Schnigges    schedule 28.09.2016    source источник


Ответы (1)


Командный поток install(DIRECTORY) существует специально для установки каталога с его подкаталогами и файлами.

install(DIRECTORY ${CMAKE_SOURCE_DIR}/resources/
        DESTINATION resources
        COMPONENT ResourcesCursors)

или даже

install(DIRECTORY ${CMAKE_SOURCE_DIR}/resources
        DESTINATION .
        COMPONENT ResourcesCursors)

скопирует каталог resource в исходном дереве в каталог установки. Дополнительные сведения см. в документации по установке.

person Tsyvarev    schedule 28.09.2016