在cmake中有没有一种变量可以像传递了-q选项一样使用?这将很好,因为我的构建非常模块化,而且cmake的输出会让它变得混乱。 我正在一个c++项目中使用它。
从CMake 3.1开始,设置CMAKE_INSTALL_MESSAGE
也非常有用。例如,set(CMAKE_INSTALL_MESSAGE LAZY)
将跳过-- Up-to-date:
消息。
我不知道有任何变量。然而,你可以在顶层的CMakeLists.txt文件(在project
命令之前)添加以下hack来控制输出:
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
中的错误类型,忽略警告。 - Fraser对于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.
自CMake 3.1版本以来,此选项已存在。
set(CMAKE_MESSAGE_LOG_LEVEL "WARNING")
https://cmake.org/cmake/help/latest/variable/CMAKE_MESSAGE_LOG_LEVEL.html