CMake----if与option使用小记
来源:互联网 发布:狼群算法 编辑:程序博客网 时间:2024/05/17 22:42
IF
在CMake中if语法比较简单,if后面括号中的参数随着CMake版本的推进,在else和endif中也可以不用写了。
if(address)else()endif()
对于if语法,比较常用的就是字符串比较了,这里个人简单用到过两种,一种是这个变量有没有定义过。有两种写法可以验证
if(DEFINED address)else()endif()
if(address)else()endif()
两种都可以验证这个变量有没有定义过,注意:是定义过,比如你在CMake命令行中随便写了-Daddress=xxx,就表示定义过了,对里面的值没有任何要求。
第二中常用的用法就是字符串比较,比如
if(${address} STREQUAL "ON")else()endif()
这种就是比较字符串的值了,注意:在这个时候,你的脚本已经假设你对于address已经有了 已被定义的默认要求 ,也就是说此时如果你没有定义过address变量,在正常处理cmake ..的时候会报错,会提示无法识别的参数“STREQUAL”和"ON",这个需要特别注意。
OPTION
有的同学会问了,如果我就想有个默认值呢?如果我就想,当我自己不去设这个,我希望它存在,被定义过,并且有个自己的默认值,有没有办法?
答案当然是有的,强大的CMake为我们准备了--option这个命令,给我们作为默认初始值并且作为定义值的候选。
option(address "This is a option for address" ON)
此时表示,如果用户没有定义过address,那我address的默认值就是ON,如果用户在命令行显示改变过address的值比如为OFF,那么在脚本中address的值就是OFF。
有一个需要注意,就是对于那些依赖于address有没有定义过的时候,如果你用了option你要特别注意,就是在脚本处理过程中,如果你没有在命令行中显示定义过address,那么在option之前的语句对于address都是没有定义过,直到到达了option,此时才真正定义了address.说起来不好理解,给个例子
if(address) message("defined address!!!!!!!!!!")else() message("NOT defined address!!!!!!!!!")endif()option(address "hello world" ON)message("option is ${address}")if(address) message("defined address!!!!!!!!!!")else() message("NOT defined address!!!!!!!!!")endif()
输出结果为
NOT defined address!!!!!!!!!!option is adefined address!!!!!!!!!!
这样就比较好理解了。
配合option和if一起使用,可以灵活多变的针对编译环境做各种定制化处理,包括项目中宏的各种替换和使用等等。这里我给大家开了个简单的头,希望这篇文章能够给你带来哪怕只有一点点的帮助就够了 : )
http://www.tuicool.com/articles/QrQvqq
- CMake----if与option使用小记
- CMake----if与option使用小记
- cmake option的使用
- Cmake 安装与使用
- CMake介绍与使用
- CMake 简介与使用
- visjs使用小记-2.option参数注释说明
- CMake安装与使用速成
- CMake 的安装与使用
- CMake的介绍与使用
- eclipse与cmake配合使用
- Cmake使用示例与整理
- [CMake] CMake的使用
- cmake使用示例与整理总结
- cmake使用示例与整理总结
- cmake使用示例与整理总结
- cmake使用示例与整理总结
- cmake使用示例与整理总结
- 大坑已填,留个纪念:裁剪ttf,让其大小更适用于移动设备与网页
- 在Eclipse(Myeclipse)的DDMS中如何查看手机data文件夹中的内容
- 平面物体检测
- 【HAOI2015】【树形dp】树上染色
- 黑马程序员——IO流4:IO流操作规律
- CMake----if与option使用小记
- windows service调试
- 快速掌握一个语言最常用的50%
- mongodb副本集
- mac os 多屏显示Dock
- [leetcode]Dungeon Game
- Android bindService的例子
- 静态链接
- 时间段合并