cmake-configure-log(7)¶
在 3.26 版本中添加。
介绍¶
CMake 将某些在配置步骤中发生的事件写入运行日志,称为配置日志。配置日志不包含配置项目时打印的所有输出、错误或消息的日志。它是一些特定事件(比如 try_compile()
工具链检查)的详细信息日志,用于调试构建树的配置。
对于人工使用,此版本的 CMake 会将配置日志写入文件
${CMAKE_BINARY_DIR}/CMakeFiles/CMakeConfigureLog.yaml
然而,日志文件的路径和名称可能会在将来的 CMake 版本中更改。读取配置日志的工具应使用对 cmake-file-api(7)
的 configureLog 查询来获取其路径。有关详细信息,请参见下面的 日志版本 部分。
日志结构¶
配置日志旨在同时适合机器和人工阅读。
日志文件是一个 YAML 文档流,其中包含零个或多个 YAML 文档,通过文档标记分隔。每个文档都以 ---
文档标记行开头,包含一个单一的 YAML 映射来记录一个 CMake “configure” 步骤的事件,如果配置步骤正常完成,则以 ...
文档标记行结尾
---
events:
-
kind: "try_compile-v1"
# (other fields omitted)
-
kind: "try_compile-v1"
# (other fields omitted)
...
每次 CMake 配置构建树并记录新事件时,就会将新的文档追加到日志中。
每个文档根映射的键是
事件
一个 YAML 块序列节点,对应于一个 CMake “configure” 步骤中记录的事件。每个事件是一个 YAML 节点,包含一个 事件类型(见下文)。
日志版本¶
每个 事件类型 都独立进行版本控制。一个事件日志项提供的键集取决于其主版本。记录事件时,总是将正在运行的 CMake 版本已知的该事件类型的最新版本写入日志。
读取配置日志的工具必须忽略它们不理解的事件类型和版本
未来版本的 CMake 可能会引入新的事件类型或版本。
如果现有的构建树被不同版本的 CMake 重新配置,则日志可能包含相同事件类型的不同版本。
如果
cmake-file-api(7)
查询请求一个或多个 configureLog 对象版本,日志可能包含同一事件的多条条目,每个事件具有不同版本事件类型。
IDE 应该在运行 CMake 之前编写 cmake-file-api(7)
查询请求特定的 configureLog 对象版本,然后仅根据文件 API 回复中所述读取配置日志。
文本块编码¶
为了使日志可被人阅读,始终使用 YAML 字面量块标量表示文本块 (|
)。由于字面量块标量不支持转义,因此反斜杠和不可打印的字符在应用程序层进行编码
\\
编码一个反斜杠。\xXX
使用两个十六进制数字XX
编码一个字节。
事件类型¶
每种事件类型都由下述形式的 YAML 映射表示
kind: "<kind>-v<major>"
backtrace:
- "<file>:<line> (<function>)"
checks:
- "Checking for something"
#...event-specific keys...
所有事件通用的键为
kind
标识事件类型和主要版本的字符串。
backtrace
报告事件发生的 CMake 源代码位置的调用堆栈的 YAML 块序列,从最近到最远。每个节点是将一个位置格式化为
<file>:<line> (<function>)
的字符串。checks
事件至少发生一次待处理
message(CHECK_START)
时,才会显示此可选键。其值为报告待处理检查堆栈的 YAML 块序列,从最近到最远。每个节点包含一个待处理检查消息的字符串。
其他映射键特定于每个(版本化的)事件类型,如下所述。
事件类型 message
¶
message(CONFIGURE_LOG)
命令记录 message
事件。
只有一个 message
事件主版本,版本 1。
message-v1
事件¶
message-v1
事件是 YAML 映射
kind: "message-v1"
backtrace:
- "CMakeLists.txt:123 (message)"
checks:
- "Checking for something"
message: |
# ...
对于 message-v1
映射,其特定键为
message
包含消息文本的 YAML 字面量块标量,使用我们的 文本块编码 表示。
事件类型 try_compile
¶
记录 try_compile()
事件的 try_compile()
命令。
仅有一个 try_compile
事件主要版本,即版本 1。
try_compile-v1
事件¶
try_compile-v1
事件是 YAML 映射
kind: "try_compile-v1"
backtrace:
- "CMakeLists.txt:123 (try_compile)"
checks:
- "Checking for something"
description: "Explicit LOG_DESCRIPTION"
directories:
source: "/path/to/.../TryCompile-01234"
binary: "/path/to/.../TryCompile-01234"
cmakeVariables:
SOME_VARIABLE: "Some Value"
buildResult:
variable: "COMPILE_RESULT"
cached: true
stdout: |
# ...
exitCode: 0
特定于 try_compile-v1
映射的键为
description
在使用
LOG_DESCRIPTION <text>
选项时出现的可选键。其值为包含说明<text>
的字符串。directories
描述与编译尝试关联的目录的映射。它具有以下键
source
指定
try_compile()
项目的源目录的字符串。binary
指定
try_compile()
项目的二进制目录的字符串。对于非项目调用,这通常与源目录相同。
cmakeVariables
在 CMake 将变量传播到测试项目(无论是自动执行的,还是由于
CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
变量)时出现的可选键。其值为从变量名到变量值的映射。buildResult
描述编译测试代码结果的映射。它具有以下键
variable
指定存储尝试构建测试项目的 CMake 变量名称的字符串。
cached
指示上述结果
variable
是否存储在 CMake 缓存中的布尔值。stdout
包含通过构建测试项目产生的输出的 YAML 文字块标量,使用我们的 文本块编码 来表示。这包含 stdout 和 stderr 中的构建输出。
exitCode
尝试构建测试项目的构建工具退出代码的整型。
事件种类 try_run
¶
记录 try_run
事件的 try_run()
命令。
仅有一个 try_run
事件主要版本,即版本 1。
try_run-v1
事件¶
try_run-v1
事件是 YAML 映射
kind: "try_run-v1"
backtrace:
- "CMakeLists.txt:456 (try_run)"
checks:
- "Checking for something"
description: "Explicit LOG_DESCRIPTION"
directories:
source: "/path/to/.../TryCompile-56789"
binary: "/path/to/.../TryCompile-56789"
buildResult:
variable: "COMPILE_RESULT"
cached: true
stdout: |
# ...
exitCode: 0
runResult:
variable: "RUN_RESULT"
cached: true
stdout: |
# ...
stderr: |
# ...
exitCode: 0
特定于 try_run-v1
的键映射包括 try_compile-v1 事件 中记录的那些键,外加
runResult
描述运行测试代码的结果的映射。它具有以下键
variable
一个指定存储尝试运行测试可执行文件的 CMake 变量名称的字符串。
cached
指示上述结果
variable
是否存储在 CMake 缓存中的布尔值。stdout
一个在测试项目成功构建时存在的可选键。其值为 YAML 标量文本块,包含使用我们的 文本块编码 表示的用于运行测试可执行文件的输出。
如果使用了
RUN_OUTPUT_VARIABLE
,则会同时捕获 stdout 和 stderr,因此这将同时包含两者。否则,这将仅包含 stdout 输出。stderr
一个在测试项目成功构建并且未使用
RUN_OUTPUT_VARIABLE
选项时存在的可选键。其值为 YAML 标量文本块,包含使用我们的 文本块编码 表示的用于运行测试可执行文件的输出。如果使用了
RUN_OUTPUT_VARIABLE
,则 stdout 和 stderr 将同时捕获到stdout
键中,此键将不存在。否则,这将包含 stderr 输出。exitCode
一个在测试项目成功构建时存在的可选键。其值为指定退出代码的整数,或尝试运行测试可执行文件时产生的错误消息的字符串。