2012-05-09 14 views
11

C'è una variabile che posso usare in cmake per farlo funzionare come se fosse passata l'opzione -q? Sarebbe bello perché ho una struttura molto modulare che si confonde con l'output di cmakes. Lo sto usando in un progetto C++.dire alla cmake di tacere

risposta

8

Non c'è alcuna variabile che io conosca. Tuttavia, è possibile aggiungere il seguente trucco per l'inizio della vostra top-level CMakeLists.txt (prima della chiamata project) per controllare l'uscita un po ':

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() 

Ciò ignora di CMake built-in message comando e sopprime tutte STATUS e messaggi non tipizzati, lasciando i tipi più importanti a produrre correttamente.

L'output di ad es. un messaggio WARNING cambierà da

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

a

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

nota che la linea attuale in cui è stato generato il messaggio di avviso è elencato nello stack di chiamate piuttosto che essere il prima riga del messaggio di output.

Infine, questo non ha alcun effetto sull'output di riepilogo che indica il successo o il fallimento del tentativo di configurazione.

+0

Cool! Quindi potresti fare qualsiasi tipo di messaggio che volevi allora? – alexmherrmann

+0

C'è un modo per fermare quella roba per le chiamate? Grazie per la risposta! – alexmherrmann

+0

@alexhairyman Non proprio, ma è necessario per tracciare la vera fonte dell'errore/avvertimento. Se non vuoi vedere nemmeno gli errori/gli avvertimenti, puoi sempre eliminare tutto all'interno del corpo 'function' in modo che' message' diventi un no-op. O lascia semplicemente i tipi di errore in "if" e ignora gli avvertimenti. – Fraser

3

A partire da cmake 3.1, anche l'impostazione CMAKE_INSTALL_MESSAGE è molto utile. Ad esempio, set(CMAKE_INSTALL_MESSAGE LAZY) salterà i messaggi -- Up-to-date:.