【cmake】命令 if

命令 if

  在cmake中if语法比较简单,if后面括号中的参数随着cmake版本的推进,在else和endif中也可以不用写了。

 

   对于if语法,比较常用的就是字符串比较了,这里个人简单用到过两种,一种是这个变量有没有定义过。有两种写法可以验证。

1. 方法

if(DEFINED address)
else()
endif()

 2. 方法

if(address)
else()
endif()

 

这种就是比较字符串的值了,注意:在这个时候,你的脚本已经假设你对于address已经有了已被定义的默认要求,也就是说此时如果你没有定义过address变量,在正常处理cmake ..的时候会报错,会提示无法识别的参数“STREQUAL”和"ON",这个需要特别注意。还有就是如果真的要加上大括号来取值,适当加上双引号可以防止出现一些不必要的麻烦。

    有的同学会问了,如果我就想有个默认值呢?如果我就想,当我自己不去设这个,我希望它存在,被定义过,并且有个自己的默认值,有没有办法?

    答案当然是有的,强大的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()

 

参考资料

1. CMake----if与option使用小记

posted @ 2022-04-16 17:56  苏格拉底的落泪  阅读(877)  评论(0编辑  收藏  举报