卓尔高考网

Cmake中的条件判断if/elseif/else

篇首语:本文由小编为大家整理,主要介绍了Cmake中的条件判断if/elseif/else相关的知识,希望对你有一定的参考价值。

参考技术A

   if 语句用于判断条件是否成立,条件成立时执行对应的语句。完整的格式如下:

   if 语句中条件( condition )的优先级从高到低如下:

   if 语句分为基本表达式、逻辑操作、存在性判断、文件操作、变量比较、版本号比较、变量展开几大类判定,下面依次以示例来介绍:

  文件的操作, CMake 官方文档中都要求使用全路径, if 判断的结果才是有明确定义的,相对路径可能无法识别(例如 ~ 不会解析成 home 目录)。

  比较操作可以分为三大类:1)正则表达式匹配;2)按数值大小;3)按字典序。

  数值比较有小于( LESS )、大于( GREATER )、等于( EQUAL )、大于等于( GREATER_EQUAL )、小于等于( LESS_EQUAL )五种。需要注意:比较的两个变量是有效的数值,例如100、200这些是有效数值,"100"、"200"也是有效数值,但是"a100"、"200c"就不是有效数值。如果任意一个不是有效数值,会返回 false 。

  数值比较有小于( STRLESS )、大于( STRGREATER )、等于( STREQUAL )、大于等于( STRGREATER_EQUAL )、小于等于( STRLESS_EQUAL )五种,注意不管是数还是字符串,都是 按照字典序进行比较

  版本号比较也有 VERSION_LESS 、 VERSION_GREATER 、 VERSION_EQUAL 、 VERSION_LESS_EQUAL 、 VERSION_GREATER_EQUAL 五种,需要注意两点:

  对于 if($var) 这种形式,很容易理解是要将变量 var 的值放到 if 中进行判断。但是由于在 CMake 中, if 表达式出现的比 $ 要早,因此早期对于 if(var) 这种形式, var 到底是按照变量还是值/字符串来解析? CMake 的做法是:首先看 var 是否是一个已经定义的变量,如果是,则需要将他的值替换到 if 中,否则就直把 var 当成一个字符串/值。
  来看一个例子:

  此处的 var 是一个已经定义好的变量,因此 if 判断转化为 if("NO") ,它会按照 if() 最终的判定结果是 false ,因此上面的执行结果输出 false for NO 。如果没有 set(var "NO") 这句定义,那么 if 判断转为 if() ,因为 变量不存在 而判定为 false 。

  来看一个稍微复杂一点的例子:

  在 if 命令执行之前, $var2 首先会执行,会替换成变量 var2 的值,因此变成 if(var) ,然后仍然会先去判断 var 是否是一个已经定义好的变量。因此后续的执行过程与上个例子一样。 if 判断转化为 if("NO") ,它会按照 if() 最终的判定结果是 false ,输出 false for NO 。如果没有 set(var "NO") 这句赋值,那么 if 判断转为 if() ,因为 变量不存在 而判定为 false 。当然,如果把 if($var2) 替换成 if(var2) ,会转化成 if("var") ,那么 if 判断转为 if() ,字符串结果判定为 true .

以上是关于Cmake中的条件判断if/elseif/else的主要内容,如果未能解决你的问题,请参考以下文章

您可能还会对下面的文章感兴趣: