19

我可以在 cmake 中使用一个变量来使其表现得像传递了 -q 选项一样吗?这会很好,因为我有一个非常模块化的构建,它会使 cmakes 输出变得混乱。我在 C++ 项目中使用它。

4

4 回答 4

12

从 cmake 3.1 开始,设置CMAKE_INSTALL_MESSAGE也非常有用。例如,set(CMAKE_INSTALL_MESSAGE LAZY)将跳过-- Up-to-date:消息。

于 2017-04-05T13:55:08.690 回答
11

没有我知道的变量。但是,您可以将以下 hack 添加到顶级 CMakeLists.txt 的开头(在project调用之前)以在一定程度上控制输出:

function(message)
  list(GET ARGV 0 MessageType)
  if(MessageType STREQUAL FATAL_ERROR OR
     MessageType STREQUAL SEND_ERROR OR
     MessageType STREQUAL WARNING OR
     MessageType STREQUAL AUTHOR_WARNING)
    list(REMOVE_AT ARGV 0)
    _message(${MessageType} "${ARGV}")
  endif()
endfunction()

这会覆盖 CMake 的内置message命令并禁止所有未键入STATUS的消息,从而正确输出更重要的类型。

例如,WARNING消息的输出将从

CMake Warning at CMakeLists.txt:14 (message):
  This is a dummy warning message.

CMake Warning at CMakeLists.txt:8 (_message):
  This is a dummy warning message.
Call Stack (most recent call first):
  CMakeLists.txt:14 (message)

请注意,生成警告消息的实际行列在调用堆栈中,而不是输出消息的第一行。

最后,这对指示配置尝试成功或失败的摘要输出没有影响。

于 2012-05-09T08:54:06.590 回答
1
set(CMAKE_MESSAGE_LOG_LEVEL "WARNING")

https://cmake.org/cmake/help/latest/variable/CMAKE_MESSAGE_LOG_LEVEL.html

于 2020-11-23T02:15:25.550 回答
1

对于 CMake 的安装部分,它倾向于每个文件打印一行(a la-- Up-to-date: /some/destination/path-- Installing: /some/destination/path),您可以这样做

set(CMAKE_INSTALL_MESSAGE LAZY)  # Don't tell us about up-to-date files.

不会打印已经存在的文件(如果您重复运行 install ,就像在开发过程中一样),甚至

set(CMAKE_INSTALL_MESSAGE NEVER)  # Install silently.

选项自 CMake 3.1 以来一直存在

于 2021-07-08T22:02:26.933 回答