2012-05-09 55 views
11

是否有一个变量,我可以在cmake中使用,使其行为就像它通过了-q选项?这将是很好,因为我有一个非常模块化的构建,与cmakes输出混乱。我在一个C++项目中使用它。告诉cmake安静

回答

8

没有我知道的变量。但是,您可以在下面的技巧添加到您的顶级的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) 

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

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

+0

酷!所以你可以做任何你想要的消息类型然后呢? – alexmherrmann

+0

有没有办法停止调用堆栈的东西?感谢你的回答! – alexmherrmann

+0

@alexhairyman并非如此,但您需要它来追踪错误/警告的实际来源。如果你不想看到甚至是错误/警告,你总是可以去掉'function'内的所有东西,这样'message'就成为一个空操作。或者将错误类型留在'if'中,并忽略警告。 – Fraser

3

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