cmakeList.txt学习进度(一)

本文详细介绍了CMake中`cmake_minimum_required`和`cmake_policy`的用法,包括指定最小版本、设置策略以及版本兼容问题的处理。同时,讲解了`set`命令用于设置变量,`CACHE`类型变量的跨层级传递,以及如何操作环境变量。`PUSH`和`POP`用于管理策略栈,确保局部策略的正确应用。
摘要由CSDN通过智能技术生成

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>})
取消变量

如有问题,或总结的不对,请不吝赐教,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hamburgerV

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值