* 类型
分类
BOOL STRING LIST
转换
推导
* 具名
声明周期:set 声明,${具名},unset取消
# 定义一个变量 判断是否定义用DEFINED
set(<变量名> <变量值>)
# 引用一个变量
${变量名}
# 取消一个变量
unset(<变量名>)
内部变量:
系统环境变量 $ENV{<环境变量名>}
工程源目录和bin目录
工程自身变量
符号文件、静态库、动态库和运行输出目录变量
区别系统
配置
编译器
编译参数
其他
常量
真:1 ON YES TRUE Y
假:0 OFF NO FALSE N IGNORE NOTFOUND
分支控制
# 单分支
if()
set()
endif()
# 双分支
if()
set()
else()
set()
endif()
# 多分支
if()
set()
elseif()
set()
else()
set()
endif()
循环控制
# 列表遍历
# 第一种表达
foreach(- IN LISTS
)
message("")
endforeach()
# 第二种表达
foreach(- ${
})
message("")
endforeach()
# 遍历多项
foreach(item item1 item2 item3})
message("${item}")
endforeach()
# 循环n次
foreach(loop_var RANGE num)
endforeach()
foreach(loop_var RANGE 0 num 1)
endforeach()
基本形式
function(<函数名> <变量名> ...)
endfunction()
函数类型
调用方式
string(TOUPPER ...)
string(APPEND ...)
string(REGEX MATCH ...)
list(APPEND ...)
标准函数
message 打印消息
add_subdirectory 包含子CMakeLists.txt目录
include 包含其他*.cmake文件
include_directories 头文件包含目录
link_directories 库链接目录
target_link_libraries 添加链接库
add_definitions 添加编译参数或宏
add_dependencies 为target指定依赖的target
add_executable 添加可执行程序target
add_library 添加静态库或者动态库target
target_compile_definitions 为目标添加编译参数或宏
target_include_directories 为目标添加包含目录
ExternalProject_Add 添加一个外部target,多用于安装,更新等
get_cmake_property 获取cmake工程的所有变量,包括自定义和自带变量
source_group 为IDE工程设置分组,VS相当于筛选器
find_path 从默认目录和指定目录查找头文件,并返回结果
find_library 从默认目录和指定目录查找库文件,并返回结果
find_package(name) 从CMAKE_MODULE_PATH目录中查找Find
file 读写文件创建删除文件,重新命名文件等等
target
cmake认为一个执行体、一个库或者自定义的target为一个target,通过add_executable,add_library,add_custom_target、ExternalProject_Add来增加target,简单来说通过这三个函数添加的,就是一个target,可通过if(TARGET target-name)来判断
command
简单来讲就是宏和函数,通过if(COMMAND command-name)来判断