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 etcPERMISSIONS 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 includeFILES_MATCHING PATTERN "*.h"
)# 排除特定目录
install(DIRECTORY my_project/ DESTINATION projectPATTERN "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 srcFILES_MATCHING PATTERN "*.h" PATTERN "*.cpp"PATTERN "tests" EXCLUDE
)

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/494062.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javaEE-线程的常用方法-4

目录 一.start():启动一个线程 调用start()方法 start()方法只能调用一次: java中的API: start()和run()的区别: 二.中断一个线程 中断线程方法1:引入标志位 中断线程方法2:调⽤interrupt()⽅法 抛出的异常: 三.等待一个线程 join() 四、获取线程引用 五…

服务器数据恢复—V7000存储中多块磁盘出现故障导致业务中断的数据恢复案例

服务器存储数据恢复环境: 一台V7000存储上共12块SAS机械硬盘(其中1块是热备盘),组建了2组Mdisk,创建了一个pool。挂载在小型机上作为逻辑盘使用,小型机上安装的AIXSybase。 服务器存储故障: V7…

2024年图像处理、多媒体技术与机器学习

重要信息 官网:www.ipmml.org 时间:2024年12月27-29日 地点:中国-大理 简介 2024年图像处理、多媒体技术与机器学习(CIPMT 2024)将于2024年12月27-29日于中国大理召开。将围绕图像处理与多媒体技术、机器学习等在…

linux----文件访问(c语言)

linux文件访问相关函数 打开文件函数 - open 函数原型:int open(const char *pathname, int flags, mode_t mode);参数说明: pathname:这是要打开的文件的路径名,可以是绝对路径或者相对路径。例如,"/home/user/…

Redis 集群实操:强大的数据“分身术”

目录 Redis Cluster集群模式 1、介绍 2、架构设计 3、集群模式实操 4、故障转移 5、常用命令 Redis Cluster集群模式 1、介绍 redis3.0版本推出的Redis Cluster 集群模式,每个节点都可以保存数据和整个集群状态,每个节点都和其他所有节点连接。Cl…

探索 Seaborn Palette 的奥秘:为数据可视化增色添彩

一、引言 在数据科学的世界里,视觉传达是不可或缺的一环。一个好的数据可视化不仅能传递信息,还能引发共鸣。Seaborn 是 Python 中一款广受欢迎的可视化库,而它的调色板(palette)功能,则为我们提供了调配绚…

多模态医学图像融合概述

Part1: Summary 实际应用中,我们常用到多种来源不同数据进行融合; 包括图像分解、重建、融合规则及质量评估。如:MRI、CT、PET、SPECT、US等成像方式; 也可能有点云数据融合 CT,或MR 进行定位等; Part2: 融合数据的…

STM32F103 | Embedded IDE03 - 使用OpenOCD在STM32F103项目时出现下载固件失败

导言 在上一篇备忘录介绍使用OpenOCD的stlink-v2.cfg接口下载固件,在STM32F407的项目上很顺利。但是,在stm32f103上会出现下载失败。 在网上搜了一下,这位博主的文章解决了这个问题: https://www.iotword.com/26738.html 一、修改stm32f1x.c…

Android Studio IDE环境配置

​需要安装哪些东西: Java jdk Java Downloads | OracleAndroid Studio 下载 Android Studio 和应用工具 - Android 开发者 | Android DevelopersAndroid Sdk 现在的Android Studio版本安装时会自动安装,需要注意下安装的路径Android Studio插件…

人工智能ACA(四)--机器学习基础

零、参考资料 一篇文章完全搞懂正则化(Regularization)-CSDN博客 一、 机器学习概述 0. 机器学习的层次结构 学习范式(最高层) 怎么学 监督学习 无监督学习 半监督学习 强化学习 学习任务(中间层&#xff0…

Qt之QML应用程序开发:给应用程序添加图标文件

开发环境: 1、Qt Creator 14.0.1 2、windows10 先看下面的步骤,不明白再返回来看下面官方指导链接。 先看下面的步骤,不明白再返回来看下面官方指导链接。 先看下面的步骤,不明白再返回来看下面官方指导链接。 --------------------------------------------------------…

代码随想录D24-25 回溯算法03-04 Python

目录 93. 复原 IP 地址 78. 子集 子集问题 90. 子集 II 491. 非递减子序列 46. 全排列 排列问题 47. 全排列 II 332. 重新安排行程 利用字典实现图 51. N 皇后 多维问题入门 37. 解数独 93. 复原 IP 地址 要点: 本质上和上一期的回文字串切分是相似的&am…

新能源汽车锂离子电池各参数的时间序列关系

Hi,大家好,我是半亩花海。为了进一步开展新能源汽车锂离子电池的相关研究,本文主要汇总并介绍了电动汽车的锂离子电池的各项参数,通过 MATLAB 软件对 Oxford Dataset 的相关数据集进行数据处理与分析,进一步研究各项参…

鸿蒙学习笔记:用户登录界面

文章目录 1. 提出任务2. 完成任务2.1 创建鸿蒙项目2.2 准备图片资源2.3 编写首页代码2.4 启动应用 3. 实战小结 1. 提出任务 本次任务聚焦于运用 ArkUI 打造用户登录界面。需呈现特定元素:一张图片增添视觉感,两个分别用于账号与密码的文本输入框&#…

左神算法基础巩固--1

文章目录 时间复杂度常数时间的操作时间复杂度的定义时间复杂度的作用剖析递归行为和递归行为时间复杂度的估算 排序选择排序冒泡排序插入排序归并排序小和问题问题描述解题思路 快速排序荷兰国旗问题问题描述 堆排序堆结构大根堆小根堆 桶排序 二分二分搜索 ^的运用不用额外空…

ROS1安装教程

一、环境准备 操作系统:Ubuntu 20.04 LTS 注:为保证系统干净,本文使用Docker进行 演示,如已安装相应的Ubuntu系统请忽略。 Docker安装Ubuntu系统步骤如下: # 拉取镜像 docker pull ubuntu:20.04# 创建容器 docker ru…

秒优科技-供应链管理系统 login/doAction SQL注入漏洞复现

0x01 产品简介 秒优科技提供的供应链管理系统,即秒优SCM服装供应链管理系统,是一款专为服装电商企业设计的全方位解决方案。是集款式研发、订单管理、物料管理、生产管理、工艺管理、收发货管理、账单管理、报表管理于一体的服装电商供应链管理解决方案。它涵盖了从企划到开…

【论文复刻】新型基础设施建设是否促进了绿色技术创新的“量质齐升”—来自国家智慧城市试点的证据(C刊《中国人口·资源与环境》

一、数据来源:住建部、国家知识产权局、中国城市统计年鉴,内含原始数据、处理代码和基准回归 二、数据范围: DID 为了延长政策效应估计的时间区间,将住建部公布的首批国家智慧城市作为处理组,非试点城市作为对照组。将…

【机器学习与数据挖掘实战】案例04:基于K-Means算法的信用卡高风险客户识别

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈机器学习与数据挖掘实战 ⌋ ⌋ ⌋ 机器学习是人工智能的一个分支,专注于让计算机系统通过数据学习和改进。它利用统计和计算方法,使模型能够从数据中自动提取特征并做出预测或决策。数据挖掘则是从大型数据集中发现模式、关联…

Oracle中间件 SOA之 OSB 12C服务器环境搭建

环境信息 服务器基本信息 如下表,本次安装总共使用1台服务器,具体信息如下: App1服务器 归类 APP服务器 Ip Address 172.xx.30.xx HostName appdev01. xxxxx.com Alias appdev01 OSB1服务器 归类 OSB服务器 Ip Address 172.xx3…