Cmake基础教程--第2章:打印日志和变量操作
- 概述
- message打印日志
- 打印一些CMake自带的信息
- 变量操作
- set操作
- list方法
- 添加元素
- 获取长度
- 查找元素
- 删除元素
- 其他操作
概述
CMake项目时基于一个名为 CMakeLists.txt 的文件来构造的,注意大小写不能拼写错误。我们在CMakeLists.txt 中使用CMake Language来编写项目的构建逻辑,其语法类似与命令式编程语言。
执行cmake时,会从根CMakeLists.txt 文件开始执行
message打印日志
我们在编写cmake时,经常有输出日志的需求,可以通过message指令来打印需要的日志消息,如下:
cmake_minimum_required(VERSION 3.20) #最小版本
project(HELLO) #项目名
message("Hello world!")
执行效果如下:
可以看到我们成功打印出了Hello World。
message的操作格式比较自由,以下写法都是可以的:
cmake_minimum_required(VERSION 3.20) #最小版本
project(HELLO) #项目名
message("Hello")
message("hello
world")
message(hello)
message(hello
world)
message([[hello world]])
输出如下,读者可以自行感受其输出格式的不同,想要具体了解可以去参考官方的文档,这里不做详细描述。
打印一些CMake自带的信息
我们可以使用message打印一些CMake自带的信息,取出某个变量的值的时候,需要使用${} 将需要取出值的变量包裹起来,如下:
cmake_minimum_required(VERSION 3.20) #最小版本
project(HELLO) #项目名
message(${CMAKE_VERSION}) # 打印出cmake的版本信息
我们使用${}就可以打印出变量CMAKE_VERSION 对应的值,即cmake的版本信息。CMake自带的变量还有很多,可以自行查找文档,这里不做过多赘述。
变量操作
CMake中的变量有两种,CMake自身提供的变量,或者自定义的变量。*CMake的变量的命名是区分大小写的。*我们可以通过${} 来取得一个变量的值。
set操作
我们可以通过set命令来定义一个变量,并给变量设置一个或多个值,使用message显示时多个变量会连接处理(实际上,这些变量存储时还是使用;分割开的),set命令的格式如下:
set(<variable> <value>...)
实际操作中,我们可以定义变量,其值代表我们需要编译的源文件,方便我们进行管理,如下:
cmake_minimum_required(VERSION 3.20) #最小版本
project(HELLO) #项目名
set(SRC main.cpp) # 定义变量SRC,其值为main.cpp
message(${SRC})
add_executable(test ${SRC}) #取出变量SRC的值,用于编译生成可执行文件
执行效果如下:
使用如下的命令,也可以给变量设置多个值:
set(SRC a.cpp b.cpp)
list方法
list方法提供了对一个变量的多个元素进行更复杂操作的功能,同样,我们也可以使用list来创建变量,我们接下来介绍list 的所有的常见操作。
添加元素
我们可以使用list 方法为一个变量的值列表里面增加元素,格式如下:
list(APPEND <list> <element>...)
使用示例如下:
cmake_minimum_required(VERSION 3.20) #最小版本
project(HELLO) #项目名
set(word a b)
message(${word})
list(APPEND word c d) # 将元素c,d添加到变量word中
message(${word})
# 输出为
# ab
# abcd
这里如果我们操作的变量不存在,会创建一个新的变量,和set 的操作基本等价。
获取长度
我们还可以利用list 方法来获取变量值列表的长度,格式如下:
list(LENGTH <list> <outputVar>)
执行后,会创建一个对应名字的变量,里面存储变量列表的长度,可以使用${}获取其值,示例如下:
cmake_minimum_required(VERSION 3.20) #最小版本
project(HELLO) #项目名
set(word a b c d)
list(LENGTH word len)
message(${len})
# 输出4
查找元素
格式如下:
list(FIND <list> <value> <outputVar>)
参数的解释为,value代表你要查找的元素,其下标会存储在outputVar 变量中。注意,cmake的元素下标和主流的编程语言一样,都是从0开始。
示例如下:
cmake_minimum_required(VERSION 3.20) #最小版本
project(HELLO) #项目名
set(word a b c d)
list(FIND word b index)
message(${index})
# 输出为1
删除元素
和查找操作的使用十分相似,这里不多做赘述,直接看范例,我相信你能理解。
# 格式为 list(REMOVE_ITEM <list> <value>)
cmake_minimum_required(VERSION 3.20) #最小版本
project(HELLO) #项目名
set(word a b c d)
message(${word})
list(REMOVE_ITEM word b) # 删去了元素b
message(${word})
# 输出为
# abcd
# acd
其他操作
list 还能进行一些其他操作,这里统一介绍
list(INSERT <list> <index> <value>) # 向指定下标的位置插入元素
list(REVERSE <list>) # 翻转一个变量的值列表
list(SORT <list>) # 对变量的值列表进行排序
示例如下,这些操作都很简单,相信你能轻松看懂:
cmake_minimum_required(VERSION 3.20) #最小版本
project(HELLO) #项目名
set(word a b c e)
message(${word})
list(INSERT word 3 d)
message(${word})
list(REVERSE word)
message(${word})
list(SORT word)
message(${word})
输出如下: