CMake + CPack:安装整个目录(包括子文件夹)

Posted

技术标签:

【中文标题】CMake + CPack:安装整个目录(包括子文件夹)【英文标题】:CMake + CPack: Install entire directory (including subfolders) 【发布时间】:2016-09-28 18:14:31 【问题描述】:

我正在尝试使用 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")
...
    ...

有没有一种干净的方法来复制/安装整个资源文件夹,包括所有子文件夹?

【问题讨论】:

【参考方案1】:

命令流install(DIRECTORY) 专门用于安装目录及其子目录和文件。

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

甚至

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

将源代码树中的resource 目录复制到安装目录。请参阅documentation on install 了解更多信息。

【讨论】:

以上是关于CMake + CPack:安装整个目录(包括子文件夹)的主要内容,如果未能解决你的问题,请参考以下文章

InstallDirRegKey 的 CMake/CPack 命令

使用 cpack 和 cmake 安装特定的模式文件

使用 CPack 打包时是不是需要 CMake 安装步骤?

使用 cmake 或 cpack 编辑 .bat

cmake cpack 安装打包程序

CMake 和 CPack。配置文件中的安装路径