cmake进阶:目录属性说明一

news2024/11/27 8:25:03

一.  简介

接下来简单学习一下 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.coloradmin.cn/o/1650631.html

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

相关文章

Jsoncpp介绍

1.简介 Jsoncpp 是一个 C 库,用于解析和生成 JSON 数据。它提供了一个易于使用的 DOM(Document Object Model)风格的 API,允许开发者以树形结构的方式操作 JSON 数据。 Jsoncpp 是一个C库,允许操作JSON值,…

PG WAL日志理解

类似于oracle的redo log,用于数据库恢复,当一条SQL语句执行,PG会把对应的块放到缓冲区执行,,会写进WAL缓冲区会进行写操作,commit后,WAL writer进程进行写操作,把日志缓冲区WAL buff…

【linux】初步认识文件系统

初步认识文件系统 前置知识的简单了解简单回顾C语言的文件操作stdin&stdout&stderr 系统文件IOopen函数的返回值文件描述符fd打开文件背后的操作文件描述符的分配规则 前置知识的简单了解 文件包括了文件内容和文件属性两个部分(文件内容顾名思义就是文件里面的数据等…

【Hugging Face】编写 shell 脚本在 huggingface 镜像站快速下载模型文件

前言 我们使用 Git LFS 和 wget 结合的方法,小文件使用 Git 下载,大文件使用 wget 下载 Git 下载的优缺点: 优点:相当简单 缺点:不支持断点续传 直接 wegt 下载比较稳定,但是欠缺优雅 我们可以将这两…

城市二手房数据分析与房价预测

实现功能 数据分析 二手房价格-时间分析 二手房数量-时间分析 二手房分布-区域分析 二手房户型分析 二手房朝向分析 二手房价格-区域分析 二手房热词词云 房价预测 采用合适的算法模型,对模型进行评估。通过输入影响因素输出预测价格。 采用技术与框架 M…

暗区突围服务器连接失败/网络异常/无法连接下载解决方法

暗区突围是一款仿真战场的模拟,首要介绍的自然是游戏中基本都会参与的模式,叫做战术行动,大家参与其中是会作为特遣队员的身份来做任务,面临的是一个全面自给自足的战场环境,这种模式要求玩家在进入暗区之前自行筹备所…

Springboot+Vue项目-基于Java+MySQL的影院订票系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

uni-app+vue3 +uni.connectSocket 使用websocket

前言 最近在uni-appvue3websocket实现聊天功能,在使用websocket还是遇到很多问题 这次因为是app手机应用,就没有使用websocket对象,使用的是uni-app的uni.connectSocket 为了方便测试这次用的是node.js一个简单的dom,来联调模拟…

网络基础——路由

网络基础——路由 要想网络畅通,应让网络中的路由器知道如何转发数据包到各个网段。路由器根据路由表来转发数据包,而路由表是通过直连网络、静态路由以及动态路由来构建的。 route命令,底层是使用ioctl实现;ip命令,…

洛谷 P3391:文艺平衡树 ← Splay树模板题

【题目来源】https://www.luogu.com.cn/problem/P3391【题目描述】 您需要写一种数据结构(可参考题目标题),来维护一个有序数列。 其中需要提供以下操作:翻转一个区间,例如原有序序列是 5 4 3 2 1,翻转区间…

大模型爱好者的福音,有了它个人电脑也可以运行大模型了

GPT4ALL是一款可以运行在个人电脑上的大模型系统,不需要GPU即可运行,目前支持mac,linux和windows系统。 什么是GPT4ALL? 不论学习任何东西,首先要明白它是个什么东西。 Open-source large language models that run …

【C 数据结构-图】2. 图的存储结构

文章目录 【 1. 图的顺序存储结构 】1.1 基本原理1.2 顺序存储结构的 C 实现 【 2. 图的链式存储结构 】2.1 图的临接表存储结构2.1.1 临接表的 基本原理2.1.2 临接表的 链表节点2.1.3 邻接表 各结构体的C实现2.1.4 临接表 计算顶点的出度和入度邻接表计算 无向图的出度和入度邻…

IT项目管理【太原理工大学】前置知识点精简总结

根据上次考试以及其他方向考试的经验,这届考试可能偏向出题更灵活,能死记硬背或套公式的题减少,多做准备呀各位大三苦逼人,挂了补考还得回来补考凸^-^凸共勉 (另外,别作弊,今天人工智能考试逮住…

mib browser读取mib文件的oid(飞塔防火墙为例)

在配置zabbix监控的时候,配置监控项最为麻烦,一般我们都会套用模板,这种方式比较简单,但是有些设备就是没有现成的zabbix模板,怎么办? 今天我们使用MIB Browser来获取设备SNMP的OID,然后加入zabbix 。 1.什么是MIB Browser SNMP客户端工具MIB Browser, 全名iReasonin…

牛客网刷题 | BC78 KiKi说祝福语

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 2020年来到了&#…

synchronized与volatile关键字

1.synchronized的特性 1.1互斥 synchronized 会起到互斥效果, 某个线程执行到某个对象的 synchronized 中时, 其他线程如果也执行到 同一个对象 synchronized 就会阻塞等待. 进入 synchronized 修饰的代码块, 相当于 加锁 退出 synchronized 修饰的代码块, 相当于 解锁 syn…

【Linux网络】PXE批量网络装机

目录 一、系统装机 1.1 三种引导方式 1.2 系统安装过程 1.3 四大重要文件 二、PXE 2.1 PXE实现原理 2.2 PXE手动搭建过程 2.3 kickstart配合pxe完成批量自动安装 一、系统装机 1.1 三种引导方式 硬盘光驱(U盘)网络启动 1.2 系统安装过程 加载boot loader加载启动安…

国内SaaS遇冷?未来企业服务赛道是否还有机会?

引言 SaaS 自诞生起,在国内的发展便始终是危与机并存的,虽然使用 SaaS 的企业在逐渐增多,但唱衰 SaaS 的声音也始终不绝于耳。企业付费意愿低,使用产品并不能带来直接的营收提升。SaaS 产品面临着多种不同问题。 在企业对软件付费…

静电纺丝壳聚糖纳米纤维膜

静电纺丝壳聚糖纳米纤维膜是通过静电纺丝技术制备的一种由壳聚糖纳米纤维组成的薄膜材料。静电纺丝技术是一种有效的制备微纳米纤维的方法,可以将高分子溶液或熔体在静电场作用下喷射成纤维状物质,进而形成纳米纤维膜。 壳聚糖是一种天然高分子多糖&…

程序员的实用神器:助力软件开发的利器 ️

程序员的实用神器:助力软件开发的利器 🛠️ 程序员的实用神器:助力软件开发的利器 🛠️引言摘要自动化测试工具:保障代码质量的利剑 🗡️编写高效测试用例 持续集成/持续部署工具:加速交付的利器…