CMAKE_MESSAGE_CONTEXT

在 3.17 版本中添加。

当通过 cmake --log-context 命令行选项或 CMAKE_MESSAGE_CONTEXT_SHOW 变量启用时,message() 命令会将 CMAKE_MESSAGE_CONTEXT 列表转换为一个由方括号包围的点分隔字符串,并将其添加到日志级别为 NOTICE 及以下的每行消息之前。

为了让日志上下文有效工作,项目通常应该将条目 APPENDCMAKE_MESSAGE_CONTEXT 的当前值,然后 POP_BACK,而不是替换它。项目不应假设源树顶层的消息上下文为空,因为存在上下文可能已经被设置(例如,在层次化项目中)的情况。

警告

有效的上下文名称仅限于可以用作 CMake 变量名称的任何内容。所有以下划线或字符串 cmake_ 开头的名称也保留供 CMake 使用,项目不应使用它们。

示例

function(bar)
  list(APPEND CMAKE_MESSAGE_CONTEXT "bar")
  message(VERBOSE "bar VERBOSE message")
endfunction()

function(baz)
  list(APPEND CMAKE_MESSAGE_CONTEXT "baz")
  message(DEBUG "baz DEBUG message")
endfunction()

function(foo)
  list(APPEND CMAKE_MESSAGE_CONTEXT "foo")
  bar()
  message(TRACE "foo TRACE message")
  baz()
endfunction()

list(APPEND CMAKE_MESSAGE_CONTEXT "top")

message(VERBOSE "Before `foo`")
foo()
message(VERBOSE "After `foo`")

list(POP_BACK CMAKE_MESSAGE_CONTEXT)

这将产生以下输出

-- [top] Before `foo`
-- [top.foo.bar] bar VERBOSE message
-- [top.foo] foo TRACE message
-- [top.foo.baz] baz DEBUG message
-- [top] After `foo`