CMake 入门教程之二

大纲

前言

本文将介绍 CMake 的常用功能,包括注释、Message 等。

注释功能

注释功能的概述

  • 行注释

    • # 行注释,一直运行到行尾
  • 括号注释

    • 3.0 版本之前不支持括号注释
    • #[[ ... ]] 括号注释,在括号之间可以有多行注释内容

注释功能的使用

1
2
3
4
5
6
7
8
9
10
11
cmake_minimum_required(VERSION 3.15)

project(comment)

# 单行注释

#[[
多行注释
多行注释
多行注释
]]

Message 功能

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 输出日志
        • 输出时会加前缀 --

提示

  • CMake 的默认日志级别是 STATUS。
  • CMake 的日志级别从高到低分别是:FATAL_ERROR > SEND_ERROR > WARNING > NOTICE > STATUS > VERBOSE > DEBUG > TRACE。

Message 功能的使用

  • 基础使用
1
2
3
4
5
6
7
8
9
cmake_minimum_required(VERSION 3.15)

project(message)

message("参数1")

message("参数1" "参数2")

message("参数1" "参数2" #[[注释在 message 中]] "参数3")
  • 高级使用(指定日志级别)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
cmake_minimum_required(VERSION 3.15)

project(message)

# CMake 进程会停止运行和生成
# message(FATAL_ERROR "Test FATAL_ERROR")

# CMake 进程会继续运行,但生成过程会跳过执行
message(SEND_ERROR "TEST SEND_ERROR")

# WARNING 会打印代码路径和行号
message(WARNING "TEST WARNING")

# NOTICE 等同于 `none`,也就是其效果相当于不加日志级别,比如 message("TEST NOTIC")
message(NOTICE "TEST NOTICE")

# STATUS 输出时会加前缀 --
message(STATUS "TEST STATUS")

# VERBOSE 输出时会加前缀 --
message(VERBOSE "TEST VERBOSE")

# DEBUG 输出时会加前缀 --
message(DEBUG "TEST DEBUG")

# TRACE 输出时会加前缀 --
message(TRACE "TEST TRACE")

CMake 的默认日志级别是 STATUS,若需要输出比 STATUS 日志级别更低的日志信息(比如 VERBOSE),则需要在 CMake 执行构建或者编译的时候,通过 --log-level 参数来指定日志级别:

1
2
# 指定日志级别
cmake -S . -B build --log-level=VERBOSE

CMake 的标准输出(stdout)默认会将日志信息输出到控制台(终端),另外还可以将标准输出(stdout)重定向到指定的文件,也就是将普通日志信息输出到文件中:

1
2
# 标准输出重定向到指定文件
cmake -S . -B build --log-level=VERBOSE > output.log

CMake 的标准错误输出(stderr)默认会将日志信息输出到控制台(终端),另外还可以将标准错误输出(stderr)重定向到标准输出,也就是将错误日志信息也输出到文件中:

1
2
# 标准错误输出重定向到标准输出
cmake -S . -B build --log-level=VERBOSE > output.log 2>&1