😈「CSDN主页」:传送门
😈「Bilibil首页」:传送门
😈「本文的内容」:CMake入门教程
😈「动动你的小手」:点赞👍收藏??评论📝
在CMake中,属性管理是构建系统的核心部分。通过使用
set_property
和get_property
命令,开发者可以为目标、测试、源文件、目录及全局设置和获取属性。这些属性控制着构建过程和逻辑。
set_property
set_property
命令用于设置指定范围内的属性值。
set_property(<SCOPE> <NAME> <PROPERTY> <VALUE1> [VALUE2 ...])
<SCOPE>
:定义属性的作用域。这可以是 GLOBAL
(全局范围)、DIRECTORY
(目录范围)、TARGET
(目标范围)、SOURCE
(源文件范围)、TEST
(测试范围)或 CACHE
(缓存条目范围)。<NAME>
:指定属性所属的实体名称。例如,目标的名称或源文件的路径。<PROPERTY>
:要设置的属性名称。<VALUE1> [VALUE2 ...]
:要设置的属性值。set_property(GLOBAL PROPERTY GLOBAL_PROP "Some Value")
add_executable(my_target main.cpp)
set_property(TARGET my_target PROPERTY CXX_STANDARD 17)
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY MY_DIR_PROP "Directory Value")
set_property(SOURCE src/main.cpp PROPERTY HEADER_FILE_ONLY TRUE)
add_test(NAME my_test COMMAND my_executable)
set_property(TEST my_test PROPERTY LABELS "MyTestLabel")
set_property(CACHE MY_CACHE_VAR PROPERTY TYPE STRING)
get_property
get_property 命令在 CMake 中用于获取已定义属性的值。这个命令可以用来查询各种类型的属性,包括目标属性、测试属性、源文件属性等
get_property(<variable> <SCOPE> <ITEM_NAME> PROPERTY <PROPERTY_NAME>)
<variable>
:一个变量,用于存储获取到的属性值。<SCOPE>
:定义属性的作用域。这可以是 GLOBAL
(全局范围)、DIRECTORY
(目录范围)、TARGET
(目标范围)、SOURCE
(源文件范围)、TEST
(测试范围)或 CACHE
(缓存条目范围)。<NAME>
:指定属性所属的实体名称。例如,目标的名称或源文件的路径。PROPERTY <PROPERTY_NAME>
:要获取的属性名称。[SET]
:可选参数,如果指定,只有当属性被显式设置时,命令才会成功。get_property(my_global_value GLOBAL PROPERTY GLOBAL_PROP)
get_property(my_target_std TARGET my_target PROPERTY CXX_STANDARD)
get_property(my_dir_prop DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY MY_DIR_PROP)
get_property(header_only SOURCE src/main.cpp PROPERTY HEADER_FILE_ONLY)
get_property(test_labels TEST my_test PROPERTY LABELS)
get_property(cache_type CACHE MY_CACHE_VAR PROPERTY TYPE)
为一个可执行文件目标设置自定义的编译选项,并获取这些选项
cmake_minimum_required(VERSION 3.10)
project(MyExecutableProject)
# 添加一个可执行文件
add_executable(MyExecutable main.cpp)
# 为目标设置编译选项
set_property(TARGET MyExecutable PROPERTY COMPILE_OPTIONS "-Wall" "-O3")
# 获取刚刚设置的属性
get_property(compiler_options TARGET MyExecutable PROPERTY COMPILE_OPTIONS)
message(STATUS "Compiler options for MyExecutable: ${compiler_options}")
设置全局属性以定义整个项目的C++标准,并获取该属性。
cmake_minimum_required(VERSION 3.10)
project(GlobalPropertyProject)
# 设置全局属性
set_property(GLOBAL PROPERTY CMAKE_CXX_STANDARD 17)
# 添加一个可执行文件
add_executable(MyExecutable main.cpp)
# 获取全局属性
get_property(cxx_standard GLOBAL PROPERTY CMAKE_CXX_STANDARD)
message(STATUS "Global C++ standard: ${cxx_standard}")
为当前目录设置编译器定义,并获取这些定义
cmake_minimum_required(VERSION 3.10)
project(DirectoryPropertyProject)
# 添加一个可执行文件
add_executable(MyExecutable main.cpp)
# 为当前目录设置编译器定义
set_property(DIRECTORY PROPERTY COMPILE_DEFINITIONS "MY_CUSTOM_DEFINITION")
# 获取目录属性
get_property(dir_compile_defs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY COMPILE_DEFINITIONS)
message(STATUS "Compile definitions for current directory: ${dir_compile_defs}")
CACHE
选项来持久化跨多次构建的配置。