当前位置: 首页 > article >正文

CMake的INSTALL FILES和INSTALL DIRECTORY有什么区别


在 CMake 中,install() 命令用于安装构建的目标文件、头文件、库等到指定的目标路径。install(FILES ...)install(DIRECTORY ...) 都是 install() 命令的具体用法,它们的功能和适用场景不同。

以下是两者的详细区别和用法说明:


1. install(FILES ...)

功能

  • 直接安装指定的文件到目标路径。
  • 适用于安装单个文件(如头文件、配置文件等)。

语法

install(FILES file1 file2 ... DESTINATION target_directory [OPTIONAL_ARGUMENTS])

参数说明

  • FILES: 需要安装的文件列表。
  • DESTINATION: 安装的目标路径,相对于 CMAKE_INSTALL_PREFIX
  • 可选参数:
    • PERMISSIONS: 指定文件权限(如 OWNER_READ, OWNER_WRITE 等)。
    • RENAME: 重命名文件时使用。

示例

# 将头文件安装到目标 include 目录
install(FILES header1.h header2.h DESTINATION include)

# 将文件安装到目标路径并设置权限
install(FILES config.json DESTINATION etc
    PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
)

2. install(DIRECTORY ...)

功能

  • 递归安装整个目录的内容到目标路径。
  • 适用于安装文件夹及其子文件夹中的所有内容。

语法

install(DIRECTORY dir1 dir2 ... DESTINATION target_directory [OPTIONAL_ARGUMENTS])

参数说明

  • DIRECTORY: 需要安装的目录列表。
  • DESTINATION: 安装的目标路径,相对于 CMAKE_INSTALL_PREFIX
  • 可选参数:
    • FILES_MATCHING: 只安装符合指定模式的文件。
    • PATTERNREGEX: 用于过滤文件或目录的匹配模式。
    • EXCLUDE: 排除匹配的文件或目录。

示例

# 将目录的内容递归安装到目标路径
install(DIRECTORY my_include/ DESTINATION include)

# 只安装特定扩展名的文件(如 .h 文件)
install(DIRECTORY my_include/ DESTINATION include
    FILES_MATCHING PATTERN "*.h"
)

# 排除特定目录
install(DIRECTORY my_project/ DESTINATION project
    PATTERN "build" EXCLUDE
)

主要区别

特性install(FILES)install(DIRECTORY)
用途安装指定的单个或多个文件安装整个目录及其内容
递归处理子目录不支持支持递归安装目录及其子目录
支持过滤和模式匹配不支持支持通过 PATTERNREGEX 进行过滤
适用场景安装头文件、配置文件、库文件等安装包含多个文件或目录的资源(如源码、数据、文档等)
排除内容不支持支持使用 EXCLUDE 排除匹配的文件或目录

使用建议

  • install(FILES): 当需要安装少量的特定文件时使用。
  • install(DIRECTORY): 当需要递归安装整个目录(如头文件目录、资源目录)时使用,尤其是需要过滤或排除特定文件时。

示例:结合使用 FILESDIRECTORY

# 将单个文件安装到配置目录
install(FILES config.json DESTINATION etc)

# 将整个头文件目录安装到目标 include 目录
install(DIRECTORY my_include/ DESTINATION include)

# 仅安装特定文件类型(如 .h 和 .cpp 文件),排除子目录中的文件
install(DIRECTORY my_src/ DESTINATION src
    FILES_MATCHING PATTERN "*.h" PATTERN "*.cpp"
    PATTERN "tests" EXCLUDE
)

总结

  • 使用 install(FILES) 直接安装单个或多个文件,适合静态文件或非递归安装场景。
  • 使用 install(DIRECTORY) 递归安装整个目录,适合安装复杂的目录结构或需要文件过滤的场景。

http://www.kler.cn/a/446302.html

相关文章:

  • Hive解决数据倾斜
  • 使用Python实现量子通信模拟:探索安全通信的未来
  • Vue3 的 Teleport 是什么?在什么场景下会用到?
  • 利用爬虫获取的数据能否用于商业分析?
  • WebPlotDigitizer 使用指南
  • 一个开源的自托管虚拟浏览器项目,支持在安全、私密的环境中使用浏览器
  • Glide 自定义圆角、铺满FitXY
  • MFC/C++学习系列之简单记录9——简单加法
  • ARP具体过程
  • Unity局部和世界坐标系相互转换的实现原理
  • java——Synchronized与Lock
  • 2024年《网络安全事件应急指南》
  • oracle 设置归档日志存放路径
  • 网络安全 | 五大核心领域:防护、检测、响应、恢复与治理
  • 欢乐力扣1-10
  • filebeat7.0安装和基本使用
  • 【C++】智能指针详解
  • SpringBoot Redis list 消息队列
  • HTTP—03
  • Flutter组件————FloatingActionButton
  • 【优先算法】双指针 --(结合例题讲解解题思路)(C++)
  • 【java】全文索引,普通索引,以及ES搜索引擎组件的关系
  • MATLAB中cvx工具箱的使用
  • 三次翻转实现数组元素的旋转
  • 深入了解Python模拟负载均衡器:将请求高效分发至多个服务器
  • Emacs折腾日记(四)——elisp控制结构