操作数
* 类型
分类
bool string path filepath - 配置变量类型
list
转换
推导
* 具名
声明周期:set 声明,${具名},unset取消
# 定义一个变量 判断是否定义用defined
set(<变量名> <变量值>)
# 引用一个变量
${变量名}
# 取消一个变量
unset(<变量名>)
内部变量:
- cmake_command
系统环境变量 $env{<环境变量名>}
工程源目录和bin目录
- project_source_dir 顶级cmakelists所在目录
- project_binary_dir cmake生成目录
- cmake_current_source_dir cmakelists所在目录
- cmake_current_binary_dir 工程文件所在目录
- cmake_current_list_file 引用这个变量所在文件的全路径
- cmake_current_list_dir 引用这个变量所在文件的全目录
- cmake_current_list_line 引用这个变量所在文件行号
- cmake_install_prefix 安装目录前缀
工程自身变量
- project_name
_version _version_major
符号文件、静态库、动态库和运行输出目录变量
- cmake_pdb_output_directory
- cmake_pdb_output_directory_
- cmake_archive_output_directory
- cmake_archive_output_directory_
- cmake_library_output_directory
- cmake_library_output_directory_
- cmake_runtime_output_directory
- cmake_runtime_output_directory_
区别系统
- cmake_host_win32
- cmake_host_unix(注意macos也属于unix)
- cmake_host_apple
- cmake_system_name
- cmake_host_system_processor (uname -p 或%processor_architecture%)
配置
- cmake_configuration_types 多配置的generator才存在,(debug、release...)
- cmake_build_type
编译器
- xcode_version
- msvc_version 1800表示visual studio 2013
- msvc
编译参数
- cmake_c_flags
- cmake_cxx_flags
- cmake_cxx_standard 指定c 标准,可设置为11
链接参数
- cmake_shared_linker_flags 指定链接库空格间隔,
- cmake_exe_linker_flags
配置
- cmake_
_postfix 指定目标名称后缀,比如set(cmake_debug_postfix "d")
其他
- build_shared_libs 指定生成动态库开关,默认为on
- cmake_
_postfix 指定生成配置文件后缀,比如debug的库带d
常量
真:1 on yes true y
假:0 off no false n ignore notfound
set(cmake_exe_linker_flags "${cmake_exe_linker_flags} /subsystem:console")
运算符
- equal less greater strequal strless strgreater
- version_equal version_less version_greater
- matches 正则匹配
- not and or
- exists is_directory
- command 判断函数或者宏是否可以触发
- target 判断目标是否存在
- defined 判断是否 set,直接变量名
- in_list
流程控制
分支控制
# 单分支
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
add_compile_definitions
add_compile_options
add_link_options
target_compile_definitions 为目标添加编译参数或宏
target_compile_options
target_link_options
target_include_directories 为目标添加包含目录
target_link_directories
target_link_libraries
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)来判断