cmake进阶:目录属性之 INCLUDE_DIRECTORIES说明一

一. 简介

前一篇文章学习了 cmake的一些目录属性,其中最重要的是 头文件搜索路径。文章如下:

cmake进阶:目录属性说明一-CSDN博客

本文主要学习 一个目录属性 INCLUDE_DIRECTORIES,即头文件搜索路径。

二. cmake进阶:目录属性之 INCLUDE_DIRECTORIES

1.   INCLUDE_DIRECTORIES

此属性 是 目 录 的 头 文 件 搜 索 路 径 列表, 其 实 就 是 include_directories() 命 令 所 添 加 的 目 录 。

include_directories() 命 令 会 将 指 定 的 目 录 添 加 到 INCLUDE_DIRECTORIES 属 性 中 , 所 以 INCLUDE_DIRECTORIES 属性其实就是一个头文件搜索路径列表。

准备一个C工程,顶层CMakeLists.txt文件中代码如下:

cmake_minimum_required("VERSION" "3.16")  #cmake最低版本要求
project(HELLO VERSION 1.1.0) #设置工程版本号为 1.1.0#获取目录的 INCLUDE_DIRECTORIES 属性
get_directory_property(out_var INCLUDE_DIRECTORIES)
message("${out_var}")#调用 include_directories 添加头文件搜索目录
include_directories(include)
#再次获取 INCLUDE_DIRECTORIES 属性
get_directory_property(out_var INCLUDE_DIRECTORIES)
message("${out_var}")#再次调用 include_directories,将目录放在列表前面
include_directories(BEFORE hello)
#再次获取 INCLUDE_DIRECTORIES 属性
get_directory_property(out_var INCLUDE_DIRECTORIES)
message("${out_var}")

本例中,使用了 get_directory_property() 命令,该命令用于获取目录的属性,使用方法如下:
get_directory_property(<variable> [DIRECTORY <dir>] <prop-name>)
将属性的值存储在 variable 变量中;
第二个参数是一个可选参数,可指定一个目录,如果不指定,则默认是当前源码所在目录;
第三个参数 prop-name 表示对应的属性名称。

 进入 build目录下, 运行 "cmake .." 命令后,打印信息如下:

第一个 message 打印的是空信息,说明此时 INCLUDE_DIRECTORIES 是空的,没有添加任何目录。
include_directories() 命令默认将目录添加到 INCLUDE_DIRECTORIES 列表的末尾,可显式指定 BEFORE AFTER 将目录添加到列表的前面或后面。

2.  使用 set_directory_properties() 命令设置 INCLUDE_DIRECTORIES 属性

既然如此,那是不是可以直接去设置 INCLUDE_DIRECTORIES 属性来添加头文件搜索目录,而不使用 include_directories()命令来添加?
这样当然是可以的,可以使用 set_directory_properties()命令设置目录属性。
set_directory_properties(PROPERTIES prop1 value1 prop2 value2)
接下来进行测试,假设工程目录结构如下所示:

源文件 main.c 中包含了 hello.h 头文件, hello.h 头文件在 include 目录下。
顶层 CMakeLists.txt 如下:
cmake_minimum_required("VERSION" "3.16")  #cmake最低版本要求
project(TEST VERSION 1.1.0) #设置工程版本号为 1.1.0
add_subdirectory(include)set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES /home/wangtian/Code_Learns/C_Learns/test/cmake/test/include)get_directory_property(out_var INCLUDE_DIRECTORIES)
message("${out_var}")add_executable(test main.c)
target_link_libraries(test libhello)


 

进入到 build 目录下,执行 "cmake .." 命令make 构建、编译:

需要注意的是,调用 set_directory_properties()命令设置属性时,需要使用绝对路径!!!

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

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

相关文章

VMware导入ova/ovf虚拟机文件

1.文件-打开-ova文件 2.为新虚拟机起名称 3.等待导入 4.导入完成&#xff0c;可以开始使用 参考链接&#xff1a;VMware导入ova/ovf虚拟机文件

2024年CMS市场的份额趋势和使用统计

目前市面上有超过一半的网站都是使用CMS来搭建的&#xff0c;据不完全统计&#xff0c;现在大概有900多种CDM可供选择&#xff0c;以下是最常见的CMS的市场份额和使用率信息&#xff1a; 除了WordPress以外&#xff0c;Shopify和Wix也是比较流行的内容管理系统&#xff0c;尤其…

使用pandas的merge()和join()函数进行数据处理

目录 一、引言 二、pandas的merge()函数 基本用法 实战案例 三、pandas的join()函数 基本用法 实战案例 四、merge()与join()的比较与选择 使用场景&#xff1a; 灵活性&#xff1a; 选择建议&#xff1a; 五、进阶案例与代码 六、总结 一、引言 在数据分析和处理…

无卤素产品是什么?有什么作用?

无卤素产品&#xff0c;即在生产过程中完全不使用卤素元素——氟、氯、溴、碘等——的产品。 卤素元素&#xff0c;虽然在电子设备、材料等领域应用广泛&#xff0c;却也可能潜藏危害。其阻燃剂&#xff0c;一旦在产品生命周期结束后释放&#xff0c;将对土壤和水体造成污染&a…

Linux Systemd基础教程

一、什么是systemd&#xff1f; systemd是Linux系统的一套基本构建模块。它提供了一个系统和服务管理器&#xff0c;作为PID 1运行并启动系统的其余部分。 systemd提供积极的并行化功能&#xff0c;使用套接字和D-Bus激活来启动服务&#xff0c;提供按需启动守护进程&#xf…

便捷的驾驶证识别API,简化工作流程

随着社会的发展和人们生活水平的提高&#xff0c;机动车的数量也越来越多。为了确保交通安全和减少违法行为&#xff0c;每个驾驶机动车的人都需要携带驾驶证。然而&#xff0c;识别驾驶证上的信息却是一个繁琐的过程。为了简化这个工作流程&#xff0c;提高工作效率&#xff0…

项目管理-项目绩效域1/2

项目管理&#xff1a;每天进步一点点~ 活到老&#xff0c;学到老 ヾ(◍∇◍)&#xff89;&#xff9e; 何时学习都不晚&#xff0c;加油 1.项目绩效域--整体框架 项目绩效域 重点&#xff1a; ①八大绩效域的含义。 ②八大绩效域的问题和解决方案。 ③八大绩效域与十大管…

信息系统安全与对抗-网络侦查技术与网络扫描技术(期末复习)

1、网络拓扑结构在网络攻击中的作用 查明目标网络的拓扑结构&#xff0c;有利于找到目标网络的关键节点&#xff0c;从而提高攻击效率&#xff0c;达到最大攻击效果。 2、网络侦查在网络攻击中的作用 识别潜在目标系统&#xff0c;确认目标系统适合哪种类型的攻击。 3、百度…

Verilog刷题笔记47

题目&#xff1a; From a 1000 Hz clock, derive a 1 Hz signal, called OneHertz, that could be used to drive an Enable signal for a set of hour/minute/second counters to create a digital wall clock. Since we want the clock to count once per second, the OneHer…

如何搜索空文件夹_名称为(纯或含)中/英/数/符

首先&#xff0c;需要用到的这个工具&#xff1a; 度娘网盘 提取码&#xff1a;qwu2 蓝奏云 提取码&#xff1a;2r1z 打开工具&#xff0c;切换到批量文件复制版块&#xff0c;快捷键Ctrl5 点击右侧的搜索添加 设定要搜索的范围、指定为文件夹、包括子目录&#xff0c;勾选…

英语新概念2-回译法-lesson12

第一次翻译 &#xff08;稀巴烂&#xff09; Our neiborhood,Capitain Charles Alison,will sail from P. We will ______ in the _. He will sit in his small boat, Topsail,Topsail is a famous boat. It has been across the A many times. Alison will sail at 8 o’cloc…

PXE 批量安装部署

目录 一、PEX批量部署优点 二、PXE&#xff1a;预启动执行环境 三、搭建PXE远程服务器 要想全自动安装 接下来请看步骤&#xff1a; 一、PEX批量部署优点 规模化&#xff1a;同时装配多台服务器自动化&#xff1a;安装系统 配置各种服务远程实现&#xff1a;不需要光盘&…