一. 简介
接下来简单学习一下 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,这个属性是目 录 的 头 文 件 搜 索 路 径 列表。