CMake构建实战:项目开发卷_许宏旭_AZW3_MOBI_EPUB_PDF_电子书(无页码)_许宏旭

内容节选

第4章常用命令 学习完CMake基础语法,读者应该会感受到命令在CMake程序中的重要作用了。除了注释和空白符, CMake程序中就只剩下命令调用了。本章会为大家介绍CMake提供的常用命令,它们能够帮助我们在CMake程序中实现各种功能,包括对数值、字符串、列表、文件、路径的操作,生成文件、输出日志、执行命令行程序、引用模块、实现元编程、辅助调试等。 本章篇幅较长,建议用作参考,随时查阅,不必仔细通读。不过目录还是值得浏览一遍的,因为这样就可以知道CMake到底提供了哪些命令、这些命令能够完成怎样的任务。这样日后如有相关需求,便能及时想起查阅本章了。 本章内容相比CMake官方文档,提供了更加合理的结构设计和详实的例程,理解起来更轻松。不过,书中的内容终究是静态的,而官方文档是动态更新的,因此建议时常去官方文档逛一逛,也许能收获更多! 4.1 数值操作命令:math 由于CMake脚本语言几乎完全由命令构成,不存在数学表达式这种编程语言中常见的语法结构。那么如何在CMake中完成数值运算等操作呢?当然还是依靠命令。 CMake提供了math命令用于计算数学表达式。尽管这不如表达式语法那样简单直接,但鉴于构建过程中涉及数值计算的需求少之又少,使用math命令也算是在保持CMake语法单一性的前提下较为简单实用的一种方式了。math命令的参数构成如下:math(EXPR <结果变量> "<表达式字符串>" [OUTPUT_FORMAT <格式选项>]) 该命令会计算<表达式字符串>参数中的数学表达式的结果,并将计算结果按照一定格式存放到<结果变量>中,其结果格式可以通过可选参数<格式选项> 指定。它有以下两种取值: ・HEXADECIMAL,即采用类似C语言中的十六进制表示形式,以0x开头; ・DECIMAL,即十进制表示形式,是默认选项。 表达式支持的数值字面量包括十进制数值和十六进制数值,其中十六进制数值必须以0x开头。表达式支持的运算符如下所示,它们的计算方式与C语言中对应的运算符相同: 加:+ 减:- 乘:* 除:/ 求余:% 位或:| 位与:& 位异或:^ 位取反:~ 左移:<< 右移:>> 括号:(...) math命令要求表达式中的数值和计算结果都必须是一个64位有符号整数能够表示的。对于表达式中超出表示范围的数值,CMake会报错;对于计算结果超出表示范围的,CMake会在结果变量中存放溢出的结果。 代码清单4.1所示例程中演示了有关输出格式的参数设置,以及刚刚提到的整型大小的问题。 代码清单4.1 ch004/math.cmakemath(EXPR a 10*10 OUTPUT_FORMAT DECIMAL) # a = 100math(EXPR b "0x7FFFFFFFFFFFFFFF + 0x7FFFFFFFFFFFFFFF") # b = -2math(EXPR c "16" OUTPUT_FORMAT HEXADECIMAL) # c = 0x10math(EXPR d "~16" OUTPUT_FORMAT HEXADECIMAL) # d = 0xffffffffffffffef# math(EXPR err "0xFFFFFFFFFFFFFFFF") 若将程序中第5行的注释取消,再次运行,CMake就会报告如下错误,提示数值超出了允许的范围:CMake Error at 11.math.cmake:5 (math):math cannot evaluate the expression: "0xFFFFFFFFFFFFFFFF": a numeric valueis out of range. 4.2 字符串操作命令:string 字符串操作命令,以及本章后面还会介绍的列表、文件操作命令等,都采用了类似一般编程语言中函数调用的形式:提供一个操作名称,再提供操作的参数,就可以获得一个结果。 本书在特指命令的某个具体操作时,会将同一个命令的不同操作名称对应的命令形式称为子命令,例如,string(FIND)子命令即string命令首个参数为FIND时对应的操作。 4.2.1 搜索和替换 搜索字符串string(FIND <字符串> <子字符串> <结果变量> [REVERSE]) 该命令会在<字符串>中搜索<子字符串>,并将其第一次出现的位置存放到 <结果变量>中。当指定了REVERSE时,搜索从后向前进行,即搜索<子字符串>最后一次出现的位置。如果<子字符串>不存在,结果变量的值将为−1。代码清单4.2中是一些实例。 代码清单4.2 ch004/string/搜索字符串.cmakestring(FIND aba a res)message("${res}") # 输出:0 string(FIND......

  1. 信息
  2. 内容提要
  3. 前言
  4. 资源与支持
  5. 第1章 构建之旅
  6. 第2章 CMake简介
  7. 第3章 基础语法
  8. 第4章 常用命令
  9. 第5章 实践:CMake快速排序
  10. 第6章 CMake构建初探
  11. 第7章 构建目标和属性
  12. 第8章 生成器表达式
  13. 第9章 模块
  14. 第10章 策略与向后兼容
  15. 第11章 实践:基于onnxruntime的手写数字识别库