cmake_minimum_required(VERSION min[…max])
作用 指定版本 如果版本不匹配 则会报错
指定最小版本
cmake_minimum_required(VERSION 3.11)
指定最小版本到最大版本
cmake_minimum_required(VERSION 3.11...3.2)
cmake_policy(VERSION min[…max])
用法1 指定版本
最低版本 同 cmake_minimum_required
cmake_policy(VERSION 2.0)
最小版本到最大版本 同 cmake_minimum_required
cmake_policy(VERSION 2.0...2.1)
用法2 解决 cmake 版本太新或太旧的兼容问题 显示设置策略
使用某一个版本的新或旧行为
cmake_policy(SET CMP0005 NEW)
使用某一版本的旧行为,一般不推荐 建议将代码改成新的 因为后面的版本可能会被废弃掉
cmake_policy(SET CMP0004 OLD)
用法3 获取当前设置的策略
cmake_policy(GET CMP9999 variable)
message(variable) variable取值为 NEW || OLD
用法4 CMake Policy Stack
临时设置策略
在子目录中设置 会覆盖父目录中设置的策略,但不修改父目录的策略
cmake_policy(PUSH)
cmake_policy(SET CMP8888 NEW)
cmake_policy(POP)
以上PUSH POP 必须是成对出现
版本判断
if(CMAKE_VERSION VERSION_LESS "3.16.0")
endif
project(proName)
指定项目名称
set 设置变量
set(<variable> <value>… [PARENT_SCOPE]) 设置普通变量
variable 变量 因为PARENT_SCOPE的特性尽量别同名
value 值
PARENT_SCOPE
无此项 则定义的变量作用域为调用set的函数或者当前目录
有此项
顶级中 使用会报错
用法
set(CMAKE_VAR1) 没有给值则变量状态为未设置
set(CMAKE_VAR1 1) 设置CMAKE_VAR1 值为1
set(CMAKE_VAR1 1 2 3 4) 设置设置CMAKE_VAR1 的值为多个值
set(CMAKE_VAR2 0 PARENT_SCOPE)
PARENT_SCOPE 用法1 子目录中 这个变量会的作用域提升至父目录
// 子cmakelist.txt
set(BASE_PATH "/dir" PARENT_SCOPE)
message(WARNING,${BASE_PATH}) BASE_PATH 为空
// 父cmakelist.txt
// ...
message(WARNING,${BASE_PATH}) BASE_PATH 为/dir
PARENT_SCOPE 用法2 子函数中 这个变量会提升到父函数中
// 子fn1
function(fn1)
set(BASE_PATH "/dir" PARENT_SCOPE)
message(WARNING,${BASE_PATH}) BASE_PATH 为空
endfunction()
// 父fn2
function(fn2 variable)
fn1() // 调用fn1
message(WARNING,${BASE_PATH}) BASE_PATH 为/dir
endfunction()
unset(<variable> PARENT_SCOPE)
取消变量
variable:设置要清除的变量名
PARENT_SCOPE 如果set方法设置了PARENT_SCOPE,清除时也要有
set(<variable> <value>… CACHE <type> [FORCE])
设置缓存条目,实现跨层级变量传递 类似于全局变量
variable 变量
value 值
CACHE 关键字
type 取值
BOOL ON/OFF
FILEPATH 文件路径
PATH 目录路径
STRING/STRINGS 文本行
INTERNAL 文本行 但是只用于内部,不对外呈现。主要用于运行过程中存储变量,因此使用该type意味着使用FORCE
docstring 描述文本
FORCE 已经定义的 variable 变量不会被覆盖 除非手动设置或使用这个选项
用法
// VAR1 没定义过 则值为 string1
set(VAR1 "string1" CACHE STRING "测试代码1")
// VAR1 定义过 则值还是 string1
set(VAR1 "string2" CACHE STRING "测试代码1")
// VAR1 定义过 则值强制为 string3
set(VAR1 "string3" CACHE STRING "测试代码1" FORCE)
unset(<variable> CACHE)
取消变量
set(ENV{<variable>} [<value>])
设置环境变量 仅对当前cmake进程生效
ENV 关键字
variable 变量
value 值 值为空 则等于删除这个变量
设置一个环境变量
set(ENV{VAR1} "/path")
查看一个环境变量
message($ENV{VAR1})
unset(ENV{<variable>})
取消变量
如有问题,或总结的不对,请不吝赐教,