前言
学习,其实就是用已有的知识去理解未知的过程,如果能找到已有知识和未知之间的相似之处,那么学习将事半功倍。接下来,我将尝试用找寻已经学会的编程语言和cmake之间的相似点。
以前,我只能被动的去记忆cmake的一条条命令,把一cmake看作是一个工具,我要去用一条条命令去指挥cmake去工作,可我最后发现,根本记不住。后来我调整了想法,cmake应该被看做一个编译器,cmake那一条条命令其实是一种新语言的语法,我编写的一条条命令最终会被编译成另外一个脚本。那么,让我们开启愉快的编程之旅。
声明一下,我没有去了解过cmake内部的工作原理,好奇心得有个限度,先专注于目前需要解决的事情。这里不管它最终不是以编译的方式进行,在这里都认为它是一个编译器,cmake的命令就是语法。
预备知识
cmake是一个用于管理源码编译的工具,虽然常见的使用场景是用于生成Makefile便于使用make构建工程,但其实它也可以用于其他构建系统以及IDE,例如生成Visual Studio等的工程文件。
为了能方便例子的讲解,这里先给出一些编写例子需要的预备知识。
- cmake程序必须有的两行,声明最低的版本要求和确定工程名字,并且需要放在文件的开头:
cmake_minimum_required(VERSION 2.8)
project(Test)
其中VERSION
后面的值可以换成已有的任何cmake版本值,形式是主版本号.次版本号
,例如我的机子上的cmake版本是cmake version 3.5.1
,那么我可以改成cmake_minimum_required(VERSION 3.5)
;Test
也可以改成任何名字。
2. 注释使用井号#
,可以独立一行或者和代码共用同一行。
3. 代码块类似于Python,使用缩进表示。
4. 假设读者有一定的shell编程知识,因为很多语法和shell语法类似。
5. 关键字都以英文输入状态的括号()
结尾,表达式为于括号内。
语法语义
使用cmake,其实也就是在编写脚本。既然是脚本,万变不离其宗,编程上的一套东西其实是通用的,只要你了解它的语法,就可以开始编程。
篇(wo)幅(bi)有(jiao)限(lan),这里只介绍能跑起一个简单的程序的语法而不是cmake的所有语法,毕竟有些语法使用频率也很低。编程的目的是按照一定的算法对数据进行处理,最终得到我们想要的结果。对语法的介绍将从下面几个方面进行介绍:
- 变量定义;
- 数据操作;
- 程序结构;
- 代码复用;
- 输入输出。
变量定义
cmake中用于定语变量的语法有两种方式:set()
和option()
。
set
用于定义数值型变量,理论上它定义的变量都是字符串,但是有些特殊的变量如果你愿意也可把他看成数值类型,例如set(var 10)
,你可以把它看成数值10
也可看成字符串"10