一、基础语法
为了可以显示编译信息,CMake设置了message语句,语法如下:
message([<mode>] "message to display" ...)
关于 mode 选项:
- FATAL_ERROR: CMake Error,处理方式:停止编译和生成。
- SEND_ERROR: CMake Error,处理方式:继续编译但会跳过生成。
- WARNING: CMake Warning,处理方式:继续编译和生成。
- AUTHOR_WARNING: CMake Warning,处理方式:继续编译和生成。
- DEPRECATION: CMake Deprecation Warning,用以告警旧的方法不被支持,使用
CMAKE_WARN_DEPRECATED
使能该告警打印:
set(CMAKE_WARN_DEPRECATED FALSE) # 关闭该告警
message(DEPRECATION "The use of old_function() is deprecated")
- (none) or NOTICE: 打印重要信息。
- STATUS: 用户可能感兴趣的简介信息。
- VERBOSE: 为用户提供的构建的详细信息。
- DEBUG: 为开发人员提供的构建的详细信息。
- TRACE: 更底层的构建的详细信息。
其中, NOTICE
, VERBOSE
, DEBUG
, 和 TRACE
是在CMake 3.15 才被引入的新特性。
二、设置消息等级
命令行中,使用 --log-level
设置消息等级,CMake只会打印所设置等级与更高等级的消息,有效等级为:
ERROR > WARNING > NOTICE > STATUS (default) > VERBOSE > DEBUG > TRACE
其中,对于mode类型,FATAL_ERROR
和SEND_ERROR
属于 ERROR
级别,AUTHOR_WARNING
和DEPRECATION
属于 WARNING
级别。
另外,CMake 3.17 引入 CMAKE_MESSAGE_LOG_LEVEL
,使得在 CMakeLists.txt 中可以设置消息等级。
--log-level
优先级大于 CMAKE_MESSAGE_LOG_LEVEL
。
注意,默认等级为 STATUS
,即默认情况下,VERBOSE
、DEBUG
、TRACE
三个等级的消息不会被打印。
三、示例
3.1 设置消息等级
# CMake最低版本要求
cmake_minimum_required(VERSION 3.20)
# 项目名称
project(test_4)
# 设置消息等级
set(CMAKE_MESSAGE_LOG_LEVEL VERBOSE)
# 使能 DEPRECATION 告警
set(CMAKE_WARN_DEPRECATED TRUE)
message(DEPRECATION "The use of old_function() is deprecated")
message(TRACE "This is TRACE mode")
message(DEBUG "This is DEBUG mode")
message(VERBOSE "This is VERBOSE mode")
message(STATUS "This is STATUS mode")
message(NOTICE "This is NOTICE mode")
message(AUTHOR_WARNING "This is AUTHOR_WARNING mode")
message(WARNING "This is WARNING mode")
message(SEND_ERROR "This is SEND_ERROR mode")
message(FATAL_ERROR "This is FATAL_ERROR mode")
打印结果如下:
3.2 打印普通消息
平时我们使用 message()
大多数情况下只是打印一些变量与普通消息,例如 CMake学习(四) 中的隐式变量test_4_BINARY_DIR
和 test_4_SOURCE_DIR
可以打印输出。
project(test_4)
message("test_4_BINARY_DIR = ${test_4_BINARY_DIR}")
message("test_4_SOURCE_DIR = ${test_4_SOURCE_DIR}")
结果为: