CMake获取属性命令get_property简介

2023-09-16  本文已影响0人  Domibaba

CMake中有很多内置的变量,以CMAKE_开头,本文要介绍的是另外一种“变量”,叫做属性,它与一个范围绑定。当CMake添加一个目录、创建一个目标、创建缓存条目、创建测试、创建安装目录时,也同时会生成与这些范围相关联的属性(范围可以关联多个不同属性)。属性无法通变量的获取方式${}直接得到,需要使用本文介绍的get_propery()命令进行获取。

命令简介

命令格式为:

get_property(<variable>
<GLOBAL |
DIRECTORY [<dir>] |
TARGET <target> |
SOURCE <source>
[DIRECTORY <dir> | TARGET_DIRECTORY <target>] |
INSTALL <file> |
TEST <test> |
CACHE <entry> |
VARIABLE >
PROPERTY <name>
[SET | DEFINED | BRIEF_DOCS | FULL_DOCS])

命令的第一个参数<variable>是存储属性获取的结果,第二个参数表示待获取的属性归属的范围,第三个参数是PROPERTY选项后面跟着属性的名称(可以是CMake默认定义的属性,也可以自定义属性)。

简单的示例

例如,当CMake读取CMakeLists.txt文件启动构建时,会对CMakeLists.txt文件所在的目录,添加一个名为INCLUDE_DIRECTORIES属性,表示在CMake位于当前目录下的头文件搜索目录列表(通过include_directories()命令CMake会为该属性赋值),下面来简单演示下如何获取这个属性。

CMakeLists.txt文件内容:

cmake_minimum_required(VERSION 3.22.1)
project(get_property_test)

get_property(dirs DIRECTORY ${CMAKE_CURRENT_SRC_DIR} PROPERTY INCLUDE_DIRECTORIES)
message("# Get current directory property INCLUDE_DIRECTORIES: ${dirs}")

include_directories(test)
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SRC_DIR} PROPERTY INCLUDE_DIRECTORIES)
message("# Get current directory property INCLUDE_DIRECTORIES after include 'test': ${dirs}")

运行cmake .输出结果:

# Get current directory property INCLUDE_DIRECTORIES: 
# Get current directory property INCLUDE_DIRECTORIES after include 'test': /XXX/test

说明在使用include_directories(test)后,当前目录的属性INCLUDE_DIRECTORIES被修改了,把test目录增加了进去。

参数详解

范围参数

指定的范围必须是如下的选项之一:

其他参数选项

上一篇下一篇

猜你喜欢

热点阅读