【发布时间】:2012-05-17 13:44:06
【问题描述】:
我可以在 cmake 中使用一个变量来使其表现得像通过了 -q 选项一样吗?这会很好,因为我有一个非常模块化的构建,它会使 cmakes 输出变得混乱。我在一个 c++ 项目中使用它。
【问题讨论】:
我可以在 cmake 中使用一个变量来使其表现得像通过了 -q 选项一样吗?这会很好,因为我有一个非常模块化的构建,它会使 cmakes 输出变得混乱。我在一个 c++ 项目中使用它。
【问题讨论】:
从 cmake 3.1 开始,设置CMAKE_INSTALL_MESSAGE 也非常有用。例如,set(CMAKE_INSTALL_MESSAGE LAZY) 将跳过 -- Up-to-date: 消息。
【讨论】:
没有我知道的变量。但是,您可以将以下 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)
请注意,生成警告消息的实际行列在调用堆栈中,而不是输出消息的第一行。
最后,这对指示配置尝试成功或失败的摘要输出没有影响。
【讨论】:
function 正文中的所有内容,以便 message 成为无操作。或者只是将错误类型留在if 中并忽略警告。
set(CMAKE_MESSAGE_LOG_LEVEL "WARNING")
https://cmake.org/cmake/help/latest/variable/CMAKE_MESSAGE_LOG_LEVEL.html
【讨论】:
对于 CMake 的安装部分,它倾向于每个文件打印一行(例如 -- Up-to-date: /some/destination/path 和 -- Installing: /some/destination/path),您可以这样做
set(CMAKE_INSTALL_MESSAGE LAZY) # Don't tell us about up-to-date files.
不打印已经存在的文件(如果您重复运行安装,就像您在开发过程中一样),甚至
set(CMAKE_INSTALL_MESSAGE NEVER) # Install silently.
【讨论】: