2012-05-09 49 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:消息。