2012-05-09 4 views
11

¿Existe alguna variable que pueda usar en cmake para que actúe como si hubiera pasado la opción -q? Sería bueno porque tengo una construcción muy modular que se complica con la salida de cmakes. Lo estoy usando en un proyecto de C++.dile a cmake que se mantenga en silencio

Respuesta

8

No hay ninguna variable que yo sepa. Sin embargo, puede agregar este truco para el inicio de su alto nivel CMakeLists.txt (antes de la llamada project) para controlar la salida un tanto:

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

Esto anula de CMake incorporada message comando y suprime toda STATUS y mensajes sin tipo, dejando los tipos más importantes para que salgan correctamente.

La salida de p. Ej. un mensaje WARNING cambiará de

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) 

Tenga en cuenta que la línea real en la que se generó el mensaje de advertencia aparece en la pila de llamadas en lugar de ser la primera línea del mensaje de salida.

Por último, esto no tiene ningún efecto en el resultado de resumen que indica el éxito o el fracaso del intento de configuración.

+0

¡Genial! Entonces podrías hacer cualquier tipo de mensaje que quisieras entonces ¿eh? – alexmherrmann

+0

¿Hay alguna manera de detener esa pila de llamadas? ¡Gracias por la respuesta! – alexmherrmann

+0

@alexhairyman No realmente, pero lo necesita para rastrear el origen real del error/advertencia. Si no quieres ver incluso los errores/advertencias, siempre puedes quitar todo lo que está dentro del cuerpo de la "función" para que 'mensaje 'se convierta en un no-operativo. O simplemente deje los tipos de error en 'if' e ignore las advertencias. – Fraser

3

A partir de cmake 3.1, la configuración CMAKE_INSTALL_MESSAGE también es muy útil. Por ejemplo, set(CMAKE_INSTALL_MESSAGE LAZY) omitirá los mensajes -- Up-to-date:.

Cuestiones relacionadas