cmake流程控制---cmake数学计算操作和if命令

目录

cmake 数学计算操作

demo

if命令

基本表达式

逻辑表达式(NOT AND OR)

比较表达式

正则表达式

demo

文件系统相关

判断是否存在的表达式 


cmake 数学计算操作

有时候我们需要对cmake变量之间进行数学运算,这时候cmake提供了math()这个命令,命令格式如下:

math(EXPR outVar mathExpr [OUTPUT_FORMAT format])

这个命令也是很简单,直接通过cmake变量结合数学运算符组成mathExpr,然后将结果保存到outVar

中.

OUTPUT_FORMAT是可选参数,代表输出结果的格式,可以是

  • HEXADECIMAL:输出16进制结果.
  • DECIMAL:输出10进制结果

demo

message("-------------------------------")
set(x 3)
set(y 7)
math(EXPR zDec "(${x} + ${y}) * 2")
message("zDec = ${zDec}")
math(EXPR zDec "(${x} + ${y}) * 2" OUTPUT_FORMAT DECIMAL)
message("DECIMAL zDec = ${zDec}")
math(EXPR zDec "(${x} + ${y}) * 2" OUTPUT_FORMAT HEXADECIMAL)
message("HEXADECIMAL zDec = ${zDec}")

 

if命令

现在cmake的if()命令格式如下:

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

上述命令格式中,elseif和else是可选的,而且elseif可以有多个,但必须在else之前列出.

其中最重要的就是括号中的表达式,这个用来判断要走那个分支的关键.

基本表达式

if(value)
  • ON,YES,TRUE,Y视为真
  • OFF,NO,FALSE,N,IGNORE,NOTFOUND,空字符串,以-NOTFOUND结尾的字符串被视为假.
  • 如果是一个数字,将根据C语言的规则转换为bool值.
  • 如果上面三种情况都不适用,那该条件表达式将最为一个变量的名字.
    • 如果没有使用引号,那该变量的值会和为假的值对比,如果匹配上则为假,否则为真,如果其值是空字符串则为假.
    • 如果使用引号
      • cmake3.1及以后,如果该字符串不匹配任何为真的值,那该条件表达式为假.
      • cmake3.1以前,如果该字符串匹配到任何存在的变量名字,则会按照变量处理.
    • if(ENV{some_var})这种形式的条件表达式永远为假,所以不要使用环境变量

逻辑表达式(NOT AND OR)

if (NOT expressin)

if (expression1 AND expression2)

if (expression1 OR expression2)

if (NOT (expression1 AND (expression2 OR expression3)))

比较表达式

if (value1 OPERATOR value2)
Number(数字)string(字符串)Version number(版本号)Path(路径)
LESS(小于)STRLESSVERSION_LESS
GREATER(大于)STRGEREATERVERSION_GREATER
EQUAL(等于)STREQUALVERSION_EQUALPATH_EQUAL
LESS_EQUAL(小于等于)STRLESS_EQUALVERSION_LESS_EQUAL
GREATER_EQUALSTRGREATER_EQUALVERSION_GREATER_EQUAL

版本号比较格式:major[.minor[.patch[.tweak]]]

正则表达式

if (value MATCHES regex)

demo

如果是Fred或者Barney执行if中的语句,否则执行else语句.

message("-------------------------------")
set(who "Fred")
if("Hi from ${who}" MATCHES "Hi from (Fred|Barney).*")
    message(STATUS "says Hello")
else()
    message(STATUS " 执行到这里")
endif()

 

文件系统相关

if (EXISTS pathFileOrDir)         #是否存在文件
if (IS_DIRCTORY pathToDir)        #是不是目录
if (IS_SYMLINK fileName)          #是不是符号链接
if (IS_ABSOLUTE path)             #是不是绝对路径              
if (file1 IS_NEWR_THAN file2)     #第一个文件是不是比第二个文件新

判断是否存在的表达式 

if (DEFINED name)                #有没有定义name这个变量
if (COMMAND name)                #有没有name这个命令
if (POLICY name)                 #有没有name这个策略
if (TARGET name)                 #有没有name这个目标
if (TEST name)                   #有没有name这个单元测试
if (value IN_LIST listVar)       #value这个值是不是在listVar这个列表里面
if (DEFINED SOMEVAR)             #检查是不是定义了SOMEVAR这个变量
if (DEFINED CACHE{SOMEVAR})      #检查是不是CACHE(缓存)SOMEVAR这个变量
if (DEFINED ENV{SOMEVAR})        #检查是不是定义了ENV(环境)SOMEVAR这个变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
cmake-3.11.2-win64-x64 是一个用于 Windows 操作系统的 CMake 版本。CMake 是一个跨平台的开源构建工具,用于自动生成适用于不同的操作系统(例如 Windows、Linux 和 macOS)和编译器的构建文件。 cmake-3.11.2-win64-x64 意味着这是一个适用于 64 位 Windows 系统的 CMake 版本,可以用于开发和构建 64 位的 Windows 应用程序。CMake 提供了一种简化和标准化项目构建过程的方法,通过 CMake 脚本文件,可以描述项目的源代码、依赖项、编译选项等信息。 使用 cmake-3.11.2-win64-x64,您可以在 Windows 操作系统上进行项目的构建和编译。首先,您需要将 cmake-3.11.2-win64-x64 下载到本地计算机上,并按照安装指南进行安装。安装后,您可以在命令行中使用 cmake 命令或者使用图形界面工具(如 CMake-GUI)来配置项目的构建环境。 通过使用 CMake 构建项目,您可以轻松地生成适用于 Visual Studio、MinGW、Ninja 等常见编译器和构建工具的构建文件。通过执行生成的构建文件,您可以在本地计算机上编译和构建项目,生成可执行文件或者库文件。 总结来说,cmake-3.11.2-win64-x64 是一个适用于 64 位 Windows 系统的 CMake 版本,它提供了一种简化和标准化的项目构建过程,可以帮助开发者在 Windows 下进行项目的构建和编译。通过 CMake,您可以自动生成适用于不同平台和编译器的构建文件,从而提高项目的可移植性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

波雅_汉库克

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

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

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

打赏作者

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

抵扣说明:

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

余额充值