CMake 入门教程之二
大纲
前言
本文将介绍 CMake 的常用功能,包括注释、Message 等。
注释功能
注释功能的概述
行注释
#
行注释,一直运行到行尾
括号注释
3.0
版本之前不支持括号注释#[[ ... ]]
括号注释,在括号之间可以有多行注释内容
注释功能的使用
1 | cmake_minimum_required(VERSION 3.15) |
Message 功能
在 CMake 中,Message 功能的本质就是日志打印,类似 Java 中的 Log4J 实现。
Message 基础功能的概述
基础使用
message(arg1 arg2 arg3 ...)
高级使用(指定日志级别)
message([<level>] arg1 arg2 arg3 ...)
--log-level=<FATAL_ERROR|SEND_ERROR|WARNING|NOTICE|STATUS|VERBOSE|DEBUG|TRACE>
- 标准输出使用的是
stdout
,标准错误输出使用的是stderr
- 日志级别
- FATAL_ERROR
- CMake 进程会停止运行和生成
- 使用
stderr
输出日志
- SEND_ERROR
- CMake 进程会继续运行,但生成过程会跳过执行
- 使用
stderr
输出日志
- WARNING
- 会打印代码路径和行号
- 使用
stderr
输出日志
- NOTICE
- 等同于
none
,也就是其效果相当于不加日志级别,比如message("TEST NOTIC")
- 使用
stderr
输出日志
- 等同于
- STATUS
- 项目用户可能感兴趣的信息
- 使用
stdout
输出日志 - 输出时会加前缀
--
- 属于 CMake 的默认日志级别
- VERBOSE
- 针对项目用户的详细信息
- 使用
stdout
输出日志 - 输出时会加前缀
--
- DEBUG
- 项目本身的开发人员使用的调试信息
- 使用
stdout
输出日志 - 输出时会加前缀
--
- TRACE
- 项目非常底层实现细节的细粒度信息
- 使用
stdout
输出日志 - 输出时会加前缀
--
- FATAL_ERROR
提示
- CMake 的默认日志级别是 STATUS。
- CMake 的日志级别从高到低分别是:FATAL_ERROR > SEND_ERROR > WARNING > NOTICE > STATUS > VERBOSE > DEBUG > TRACE。
Message 基础功能的使用
- 基础使用
1 | cmake_minimum_required(VERSION 3.15) |
- 高级使用(指定日志级别)
1 | cmake_minimum_required(VERSION 3.15) |
CMake 的默认日志级别是 STATUS,若需要输出比 STATUS 日志级别更低的日志信息(比如 VERBOSE),则需要在 CMake 执行构建或者编译的时候,通过 --log-level
参数来指定日志级别:
1 | # 指定日志级别 |
CMake 的标准输出(stdout
)默认会将日志信息输出到控制台(终端),另外还可以将标准输出(stdout
)重定向到指定的文件,也就是将普通日志信息输出到文件中:
1 | # 标准输出重定向到指定文件 |
CMake 的标准错误输出(stderr
)默认会将日志信息输出到控制台(终端),另外还可以将标准错误输出(stderr
)重定向到标准输出,也就是将错误日志信息也输出到文件中:
1 | # 标准错误输出重定向到标准输出 |
Message 查找库日志的概述
Message Reporting Checks 查找库日志的使用说明如下:
- 语法:
message(<checkState> "message text" ...)
CHECK_START
:开始记录将要执行检查的消息CHECK_PASS
:记录检查的成功结果CHECK_FAIL
:记录不成功的检查结果
- 支持嵌套使用
- 支持 STATUS 日志级别
Message 查找库日志的使用
- 查找库日志
1 | cmake_minimum_required(VERSION 3.15) |
执行后输出的结果:
1 | -- Find xcpp |
- 嵌套查找库日志
1 | cmake_minimum_required(VERSION 3.15) |
执行后输出的结果:
1 | -- Find xcpp |
- 嵌套查找库日志 + 显示缩进
1 | cmake_minimum_required(VERSION 3.15) |
执行后输出的结果:
1 | -- Find xcpp |
变量功能
变量功能的概述
变量语法
set(<variable> <value>)
set
将⼀个 CMAKE 变量设置为给定值set(<variable> <value>)
将变量<variable>
的值设置为<value>
。如果没有指定<value>
,那么这个变量就会被撤销⽽不是被设置
unset(<variable>)
unset
取消 CMAKE 变量的设置
变量使用
- 变量引用是值替换,如果未设置变量,会返回空字符串
- 变量引用可以嵌套,并从内向外求值
- 变量名大小写敏感
- 引用已设置的变量:
${VAR}
变量与字符串
string(ASCII 27 Esc)
- 直接在字符串中引用变量
${VAR}
变量让 Message 输出不同的颜色
\033[1;31;40m
:1 - 高亮显示,31 - 前景色红色,40 - 背景色黑色\033[0m
:采用终端默认设置,即取消颜色设置- 显示方式
0
:终端默认设置1
:高亮显示4
:使用下划线5
:闪烁7
:反白显示8
:不可见
- 颜色
- 参考下述颜色表
前景色 | 背景色 | 颜色 |
---|---|---|
30 | 40 | 黑色 |
31 | 41 | 红色 |
32 | 42 | 绿色 |
33 | 43 | 黃色 |
34 | 44 | 蓝色 |
35 | 45 | 紫红色 |
36 | 46 | 青蓝色 |
37 | 47 | 白色 |
变量功能的使用
- 基础使用
1 | cmake_minimum_required(VERSION 3.15) |
执行后输出的结果:
1 | VAR1 = 测试变量VAR1的值 |
- 嵌套使用
1 | cmake_minimum_required(VERSION 3.15) |
执行后输出的结果:
1 | VAR2 = VAR1 |
- 让 Message 输出不同的颜色
1 | cmake_minimum_required(VERSION 3.15) |
执行后输出的结果: