2012-05-09 27 views
11

Czy istnieje zmienna, której można używać w cmake, aby działał tak, jakby został przekazany jako opcja -q? Byłoby miło, ponieważ mam bardzo modularną konstrukcję, która staje się nieporządna w wynikach cmakes. Używam go w projekcie C++.powiedz cmake, aby był cichy

Odpowiedz

8

Nie ma żadnej zmiennej, którą znam. Jednakże, można dodać następujące siekać na początku swojego najwyższego poziomu CMakeLists.txt (przed wywołaniem project) do sterowania wyjściem nieco:

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

nadpisuje ten CUpewnij wbudowanego polecenia message i tłumi wszelkie STATUS i wiadomości bez typu, pozostawiając ważniejsze typy do prawidłowego wyprowadzania.

Dane wyjściowe np. komunikat WARNING zmieni się z

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

do

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

pamiętać, że rzeczywiste linii, gdzie komunikat został wygenerowany jest wymieniony w stos wywołań zamiast bycia pierwszy wiersz komunikatu wyjściowego.

Ostatecznie nie ma to wpływu na dane wyjściowe podsumowania, które wskazuje na powodzenie lub niepowodzenie próby konfiguracji.

+0

Super! Więc mógłbyś zrobić dowolny rodzaj wiadomości, którą chciałeś, co? – alexmherrmann

+0

Czy istnieje sposób na zatrzymanie tego stosu wywołań? Dziękuję za odpowiedź! – alexmherrmann

+0

@alexhairyman Niezupełnie, ale potrzebujesz go do śledzenia rzeczywistego źródła błędu/ostrzeżenia. Jeśli nie chcesz widzieć nawet błędów/ostrzeżeń, zawsze możesz odciąć wszystko wewnątrz ciała 'function', aby' message' stał się no-op. Lub po prostu pozostaw błędy w "if" i ignoruj ​​ostrzeżenia. – Fraser

3

Od wersji cmake 3.1 bardzo przydatne jest ustawienie CMAKE_INSTALL_MESSAGE. Na przykład set(CMAKE_INSTALL_MESSAGE LAZY) pominie komunikaty -- Up-to-date:.

Powiązane problemy