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.mzph.cn/web/7905.shtml

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

相关文章

【React】React-redux多组件间的状态传递

效果&#xff08;部分完整代码在最底部&#xff09;&#xff1a; 编写 Person 组件 上面的 Count 组件&#xff0c;已经在前面几篇写过了&#xff0c;也可以直接翻到最底部看 首先我们需要在 containers 文件夹下编写 Person 组件的容器组件 首先我们需要编写 index.jsx 文件…

stm32之hal库串口中断和ringbuffer的结合

前言 结合hal库封装的中断处理函数使用rt-thread内部的rt-ringbuffer数据结构源码改造hal库串口部分的源码&#xff0c;将内部静态方法变为弱引用的函数&#xff0c;方便重写标志位采用信号量或变量的两种方式&#xff0c;内部数据分配方式采用动态和静态两种方式 hal库部分串…

【免费】虚拟同步发电机(VSG)惯量阻尼自适应控制仿真模型【simulink】

目录 主要内容 仿真模型要点 2.1 整体仿真模型 2.2 电压电流双闭环模块 2.3 SVPWM调制策略 2.4 无功电压模块 2.5 自适应控制策略及算法 部分结果 下载链接 主要内容 该模型为simulink仿真模型&#xff0c;主要实现的内容如下&#xff1a; 随着风力发电、光…

循环链表 -- c语言实现

#pragma once // 带头双向循环链表增删查改实现 #include<stdlib.h> #include<stdio.h> #include<assert.h>typedef int LTDataType;typedef struct ListNode {LTDataType data;struct ListNode* next;struct ListNode* prev; }ListNode;//双链表申请一个新节…

ROS机械臂中Movelt!

Movelt!简介 一个易于集成使用的集成化开发平台 由一系列移动操作的功能包组成 1、运动规划 2、操作控制 3、3D感知 4、运动学 5、控制与导航算法 ....... 提供友好的GUI 可应用于工业、商业、研发和其他领域 ROS社区中使用度排名前三的功能包 Movelt!三大核心功能 …

SQL Server 存储过程中的字符串本身包含单引号的用法

文章目录 引言I 存储过程中的字符串本身包含单引号的用法1.1 问题1.2解决方法引言 使用场景: 字符串类型字段的值比较 I 存储过程中的字符串本身包含单引号的用法 在SQL Server中,单引号用于表示字符串常量。如果你的存储过程中的字符串本身包含单引号,你需要用两个连续的…

【PX4-AutoPilot教程-TIPS】MAVROS2运行px4.launch文件报错ValueError无法启动的解决方法

MAVROS2运行px4.launch文件报错ValueError无法启动的解决方法 问题描述解决方法 环境&#xff1a; Ubuntu &#xff1a;20.04 LTS ROS &#xff1a;ROS2 Foxy PX4 &#xff1a;1.13.0 问题描述 在使用命令ros2 launch mavros px4.launch命令启动MAVROS2与PX4之间的连接时报…

FL Studio20.9水果安装及切换修改中文语言教程

前言 喜欢音乐制作的小伙伴千万不要错过这个功能强大&#xff0c;安装便捷的音乐软件哦&#xff01;如果你们已经下载好了这款软件的话&#xff0c;小编今天在这里就为大家详细讲解下如何安装FL Studio软件&#xff0c;一起来学习吧&#xff01; 注意&#xff1a; &#xff0…

QT程序简单国际化实验

文章目录 第一步&#xff1a;新建一个QT工程第二步&#xff1a;添加控件第三步&#xff1a;在pro文件中添加内容第四步&#xff1a;更新文件第五步&#xff1a;打开QT的Linguist第六步&#xff1a;添加翻译内容第七步&#xff1a;回到QT Creator中添加文件第八步&#xff1a;给…

20230507,LIST容器

学了又忘学了又忘&#xff0c;明知道会忘又不想复习又还得学 LIST容器 1.1 基本概念 链表是一种物理存储单元上非连续的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接实现的&#xff1b;链表由一系列结点组成 结点&#xff1a;一个是存储数据元素的数据域&a…

Offline:IQL

ICLR 2022 Poster Intro 部分离线强化学习的对价值函数采用的是最小化均方bellman误差。而其中误差源自单步的TD误差。TD误差中对target Q的计算需要选取一个max的动作&#xff0c;这就容易导致采取了OOD的数据。因此&#xff0c;IQL取消max,&#xff0c;通过一个期望回归算子…

Mybatis进阶4-权限管理

权限管理 1.权限 //相当于 职责 2.用户 //相当于 职员&#xff08;职员就职于一个职位&#xff09; 3.角色 //相当于 职位&#xff08;有多个职责&#xff09; 权限管理基础表&#xff1a;权限表&#xff0c;用户表&#xff0c;角色表 问题1&#xff1a;…

无法添加以供审核,提交以供审核时遇到意外错误。如果问题仍然存在,请联系我们

遇到问题&#xff1a; 无法添加以供审核 要开始审核流程&#xff0c;必须提供以下项目&#xff1a; 提交以供审核时遇到意外错误。如果问题仍然存在&#xff0c;请联系我们。 解决办法&#xff1a; 修改备案号为小写&#xff0c; 例如&#xff1a;京ICP备2023013223号-2A 改…

NumPy及Matplotlib基本用法

NumPy及Matplotlib基本用法 导语NumPy导入与生成算术运算N维数组广播元素访问 Matplotlib简单图案绘制多函数绘制图像显示参考文献 导语 深度学习中经常需要对图像和矩阵进行操作&#xff0c;好在python提供了Numpy和Matplotlib库&#xff0c;前者类似一个已经定义的数组类&am…

Error Code: 1449. The user specified as a definer (‘admin‘@‘%‘) does not exist

前言 在进行MySQL数据库迁移或存储过程部署时&#xff0c;您可能会遇到错误 [Err] 1449 - The user specified as a definer (admin%) does not exist。这篇文章将为您提供一个详细的解决方案&#xff0c;帮助您顺利解决这一问题。 错误背景 此错误通常发生在尝试执行一个存…

扫描反代Cloudflare的IP 给网站CDN加速 免费制作自己的CDN加速

Cloudflare的CDN系统基本上每个站长都家喻户晓&#xff0c;大家都知道大陆对于搭建网站的审核力度&#xff0c;以至于Cloudflare并没有大陆的泛播节点&#xff0c;有也是只有香港节点。但是这些节点对于海外是加速效果&#xff0c;对于大陆就是一个字慢&#xff0c;晚高峰的情况…

JavaScript异步编程——02-Ajax入门和发送http请求

同步和异步回顾 同步和异步的简单理解 同步&#xff1a;必须等待前面的任务完成&#xff0c;才能继续后面的任务。 异步&#xff1a;不受当前任务的影响。 拿排队举例&#xff1a; 同步&#xff1a;在银行排队时&#xff0c;只有等到你了&#xff0c;才能够去处理业务。 异…

【C/C++】设计模式——单例模式

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

如何去官网下载windows10操作系统iso镜像

文章目录 一、先从微软中国官网https://www.microsoft.com/zh-cn/进去二、然后按图示一步步点进去三、点击下载工具这个工具会帮你生成windows操作系统iso文件四、下载好后一步步按图示要求成功操作一、先从微软中国官网https://www.microsoft.com/zh-cn/进去 二、然后按图示一…

分享三维地理模型制作实践

前言 地理信息系统&#xff08;GIS&#xff09;是一种用于捕获、存储、检查和显示与地球表面位置相关的数据的计算机系统。GIS可以在一张地图上显示许多不同类型的数据&#xff0c;如街道、建筑物和植被。这使人们能够更容易地看到、分析和理解模式和关系。 GIS可以使用包括位…