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

2024-05-08 03:12

本文主要是介绍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()命令设置属性时,需要使用绝对路径!!!

这篇关于cmake进阶:目录属性之 INCLUDE_DIRECTORIES说明一的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/969145

相关文章

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

Python sys模块的使用及说明

《Pythonsys模块的使用及说明》Pythonsys模块是核心工具,用于解释器交互与运行时控制,涵盖命令行参数处理、路径修改、强制退出、I/O重定向、系统信息获取等功能,适用于脚本开发与调试,需... 目录python sys 模块详解常用功能与代码示例获取命令行参数修改模块搜索路径强制退出程序标准输入

vue监听属性watch的用法及使用场景详解

《vue监听属性watch的用法及使用场景详解》watch是vue中常用的监听器,它主要用于侦听数据的变化,在数据发生变化的时候执行一些操作,:本文主要介绍vue监听属性watch的用法及使用场景... 目录1. 监听属性 watch2. 常规用法3. 监听对象和route变化4. 使用场景附Watch 的

MySQL之复合查询使用及说明

《MySQL之复合查询使用及说明》文章讲解了SQL复合查询中emp、dept、salgrade三张表的使用,涵盖多表连接、自连接、子查询(单行/多行/多列)及合并查询(UNION/UNIONALL)等... 目录复合查询基本查询回顾多表查询笛卡尔积自连接子查询单行子查询多行子查询多列子查询在from子句中使

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、