cmake进阶:目录属性说明一

一.  简介

接下来简单学习一下 cmake 中的属性相关的概念。
属性大概可以分为多种:全局属性、目录属性(源码属性)、目标属性以及其它一些分类。

二.  cmake进阶:目录属性

cmake中的属性可以 在如下网址查询到:
https://cmake.org/cmake/help/v3.5/manual/cmake-properties.7.html 
属性会影响到一些行为,这里重点给大家介绍下目录属性和目标属性,其它的大家自己去看。 
本文来简单学习一下 cmake的一些目录属性。 目录属性其实就是 CMakeLists.txt 源码的属性,来看看有哪些:

这里我们随便挑几个来讲解:

LINK_DIRECTORIES
此属性是目录的库文件搜索路径列表,其实就是 link_directories()命令所添加的目录,link_directories 命令会将指定的目录添加到 LINK_DIRECTORIES 属性中,所以, LINK_DIRECTORIES 属性其实就是一个库文 件搜索路径列表。
准备一个 C工程,顶层CMakeLists.txt文件代码如下:
# 父源码
cmake_minimum_required(VERSION 3.5)
project(TEST)#获取目录的 LINK_DIRECTORIES 属性
get_directory_property(out_var LINK_DIRECTORIES)
message("${out_var}")#添加库文件搜索目录
link_directories(include hello)
get_directory_property(out_var LINK_DIRECTORIES)
message("${out_var}")

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

同样,父目录的 LINK_DIRECTORIES 属性可以初始化、填充子目录的 LINK_DIRECTORIES 属性。
也直接去设置 LINK_DIRECTORIES 属性来添加库文件搜索目录,而不使用 link_directories() 命令来添加。 即通过调用 set_directory_properties() 命令设置。

例如,顶层 CMakeLists.txt文件可以如下设置库文件搜索目录:
cmake_minimum_required("VERSION" "3.16")  #cmake最低版本要求
project(HELLO VERSION 1.1.0) #设置工程版本号为 1.1.0#设置库文件搜索路径
set_directory_properties(PROPERTIES LINK_DIRECTORIES /home/wangtian/Code_Learns/C_Learns/test/cmake/test/hello)get_directory_property(out_var LINK_DIRECTORIES)
message("${out_var}")

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

CACHE_VARIABLES: 当前目录中可用的缓存变量列表。

CLEAN_NO_CUSTOM:如果设置为 true ,以告诉 Makefile Generators make clean 操作期间,不要删除此目录的自定义命令的输出文件。

MACROS:当期目录中可用的宏命令列表。

PARENT_DIRECTORY:加载当前子目录的源目录,其实就是说,当前源码的父源码所在路径,对于顶级目录,该值为空字符串。 此属性只读、不可修改。

VARIABLES:当前目录中定义的变量列表。 只读属性、不可修改!

下一篇文章主要学习一个重要的目录属性 INCLUDE_DIRECTORIES,这个属性是目 录 的 头 文 件 搜 索 路 径 列表。

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

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

相关文章

Candance画运算放大器

根据拉扎维《模拟CMOS集成电路设计》第九章第一个放大器进行搭建电路图。 此电路图中两个NMOS栅极互联是因为NMOS的衬底要接片上最低电压。所以要两个互联并接到最低点。 因为两条支路上的器件都是一样的,所以这两条路平分idc的直流电流。 测试的时候要加上下图这两…

2022 年全国职业院校技能大赛高职组云计算赛项试卷(私有云)

#需要资源(软件包及镜像)或有问题的,可私聊博主!!! #需要资源(软件包及镜像)或有问题的,可私聊博主!!! #需要资源(软件包…

Origin拟合EIS(电化学阻抗谱),怎么出来圆圈

1.先导入数据,以点图的形式画出来 2.重要的一步Fitting,按照我这个一步一步来就行 3.将其中的Function选择为Elipse,然后点拟合至最佳条件 4.第三步做完就会发现圆圈已经出来了,然后点OK就行 5.搞定

从0到1提审苹果商店(appstore)上线一款新APP

本篇主要复盘和介绍一款APP如何从0到1上线到苹果商店,将我自己项目遇到的坑跟大家分享,希望能为同样做开发或者运营的你提供经验,少走弯路。 如果你是24年1月1日之后开始首次提审APP,还需要先将自己的APP在工信部备案,苹果后台增加了工信部备案号的填写,备案方法和经验如…

【PCIE】基于PCIE4C的数据传输(四)——使用MSIX中断

基于PCIE4C的数据传输(三)——遗留中断与MSI中断 一文介绍了遗留中断与MSI中断两种中断方式的代码实现,本文继续基于Xilinx UltrascaleHBM VCU128开发板与linux(RHEL8.9),介绍MSIX中断方式的代码实现。本文…

Gradio之blocks灵活搭建页面

这里写目录标题 搭建一个UI界面搭建上半部分的框架比例调节以及其他效果搭建下半部分左边部分搭建下半部分右边部分拓展-CSS的应用 使用标签搭建第二个页面示例 补充AccordionGroup() 搭建一个UI界面 搭建上半部分的框架 如下图,我们想要基本还原下图右边的UI界面…

[redis] 说一说 redis 的底层数据结构

Redis有动态字符串(sds)、链表(list)、字典(ht)、跳跃表(skiplist)、整数集合(intset)、压缩列表(ziplist) 等底层数据结构。 Redis并没有使用这些数据结构来直接实现键值对数据库,而是基于这些数据结构创建了一个对象系统,来表示所有的key-value。 文章…

76.网络游戏逆向分析与漏洞攻防-移动系统分析-分析角色移动产生的数据包

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果,代码看不懂是正常的,只要会抄就行,抄着抄着就能懂了 内容…

基于vue.js+thymeleaf模板引擎+ajax的注册登陆简洁模板(含从零到一详细介绍)

文章目录 前言1、数据库准备2、工具类与相关基类使用2.1、工具类2.2、相关基类 3、web包目录说明4、注册功能设计(本文核心部分)4.1、注册页面设计4.2、注册逻辑设计 5、登陆功能设计5.1、登陆页面设计5.2、登陆逻辑设计 6、运行效果图 前言 大多数的网…

JUC-synchronized练习-交替打印ABC

今天来练习一下synchronized 简单来利用synchronized实现一个字符串的交替打印 主要的实现设置一个全局的变量state,线程执行通过不断累加state,根据state对三取余的结果来判断该线程是否继续执行还是进入等待。并通过synchronized锁住一个共享变量loc…

C语言 自定义类型——联合体

目录: 一、联合体是?声明计算内存大小 二、联合体的特点例如 三、联合体大小的计算规则: 四、应用习1习2 一、联合体是? 联合体和结构体差不多,但是其最大的区别在于联合体所有的成员共用一块内存空间。所以联合体也叫共用体。联…

【MATLAB源码-第204期】基于matlab的语音降噪算法对比仿真,谱减法、维纳滤波法、自适应滤波法;参数可调。

操作环境: MATLAB 2022a 1、算法描述 语音降噪技术的目的是改善语音信号的质量,通过减少或消除背景噪声,使得语音更清晰,便于听者理解或进一步的语音处理任务,如语音识别和语音通讯。在许多实际应用中,如…