cmake 条件判断

以下内容来自cmake官方文档: 传送门

if 语法

if(<condition>)
  <commands>
elseif(<condition>) # optional block, can be repeated
  <commands>
else()              # optional block
  <commands>
endif()

else和endif后面的括号中的<condition>可写可不写,如果写了,就必须和if中的<condition>一致。

操作符优先级

  • 优先级最高的是括号内部的表达式
  • 其次是一元测试操作符,如EXISTS, COMMAND 和 DEFINED
  • 再次是二元测试操作符,如EQUAL, LESS, LESS_EQUAL, GREATER, GREATER_EQUAL, STREQUAL, STRLESS, STRLESS_EQUAL, STRGREATER, STRGREATER_EQUAL, VERSION_EQUAL, VERSION_LESS, VERSION_LESS_EQUAL, VERSION_GREATER, VERSION_GREATER_EQUAL, 和 MATCHES
  • 最后是逻辑判断操作符,如 NOT, AND, OR

如果不记得优先级,就加括号,简单粗暴~

表达式对照表

表达式truefalse说明
<constant>constant 为1, ON, YES, TRUE, Y, 或非零数值0, OFF, NO, FALSE, N, IGNORE, NOTFOUND,空字符串,或者带-NOTFOUND后缀布尔值大小写不敏感;如果与这些常量都不匹配,则将其视为变量或字符串
<variable/string>已经定义且不是false的变量未定义或者是false的变量变量就是字符串
NOT <condition>condition为falsecondition为true
<cond1> AND <cond2>cond1和cond2同时为truecond1和cond2至少有一个为false
COMMAND command-namecommand-name是一个已经定义的CAMMAND, MACRO或FUNCTIONcommand-name未定义
POLICY policy-idpolicy-id存在policy-id不存在policy可以理解为cmake的语法,当语句无法兼容不同的cmake版本时,可以判断policy-id来做兼容性处理
TARGET target-nametarget-name是add_executable(), add_library(), add_custom_target()定义过的targettarget-name未定义
TEST test-nametest-name为add_test()创建过的测试名称test-name未创建
EXISTS path存在路径为path的文件或目录不存在路径为path的文件或目录
file1 IS_NEWER_THAN file2file1文件时间戳比file2大,其中一个文件不存在,两个文件时间戳相同其他情况路径需要时全路径
IS_DIRECTORY pathpath为目录path不为目录path必须是全路径
IS_SYMLINK pathpath为链接path不为连接path必须是全路径
IS_ABSOLUTE pathpath为绝对路径path不为绝对路径
<variable> MATCHES regexvariable与正则表达式regex匹配成功variable与正则表达式匹配失败
<var1> LESS <var2>var1和var2均为数字且var1小于var2var1不小于var2其他数值比较操作符:GREATER , EQUAL, LESS_EQUAL, GREATER_EQUAL
<var1 STRLESS var2>var1和var2为字符串且按照字典顺序var1小于var2var1不小于var2其他字符串比较操作符:STRGREATER, STREQUAL, STRLESS_EQUAL , STRGREATER_EQUAL
<var1 VERSION_LESS var2>左边版本号小于右边版本号左边版本号大于等于右边版本号其他的版本号比较操作符:VERSION_GREATER, VERSION_EQUAL, VERSION_LESS_EQUA, VERSION_GREATER_EQUAL
<var1 IN_LIST var2>右边list中包含左边不包含
DEFINED <var>已定义变量未定义变量
CACHE {<var>}已定义cache variable未定义
ENV {<var>}存在环境变量不存在环境变量
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值