在《深入浅出CMake(一):基础篇》文章中,我们已经知道了怎么依葫芦画瓢编写简单的 CMake 构建文件了,但如果应对复杂的工程的话,这还是远远不够的。
CMake 是一套编译构建体系,所以它有自己的一套语法概念,也有自己的 CMake Language,你可以讲它看做是一套脚本语言,所以它能做很多编程的事情。
这篇博文的目的是对 CMake 的基础语法进行概括,文章最后用一个九九乘法表的例子让读者加深印象。
文章开始前,让我们先回想 C/C++、JAVA、PYTHON 等等这些编程语言有什么特征
- 能够进行条件判断 if/else
- 能够循环处理 while/for/foreach
- 能够操作字符串 string
- 能够读写文件
这些特征足够我们在日常开发中编写常见的算法逻辑,处理很多问题了。
幸运的是 CMake 有类似的语法,能实现类似的功能。
CMake 有一个很重要的概念叫做命令.
COMMAND()
CMake 构建过程的操作基本上依靠各种各样的命令完成的,比如之前我们见过的
project(test)
add_executable(hello hello.cpp)
相信不难理解,官网中关于命令完整介绍在这里
下面开始,简单对 CMake 中一些语法过一眼
条件判断 if()/endif()
比如,它可以进行条件判断
if(<condition>)
<commands>
elseif(<condition>) # optional block, can be repeated
<commands>
else() # optional block
<commands>
endif()
if() 和 endif() 是配对使用的。
循环判断 foreach()/while()
foreach(<loop_var> <items>)
<commands>
endforeach()
items 是一个 list,里面的元素用分号 ; 或者空格分割开来
比如
foreach(index A B C D)
也可以这样
foreach(index RANGE 9)
RANGE 是指定的迭代模型,index 取值从 0 到 9,包括 9.