Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

tell cmake to be quiet

Tags:

build

cmake

Is there a variable I can use in cmake to make it act like it was passed the -q option? It would be nice because I have a very modular build that gets messy with cmakes output. I am using it in a c++ project.

like image 526
alexmherrmann Avatar asked May 09 '12 03:05

alexmherrmann


3 Answers

As of cmake 3.1, setting CMAKE_INSTALL_MESSAGE is also very useful. For example, set(CMAKE_INSTALL_MESSAGE LAZY) will skip the -- Up-to-date: messages.

like image 73
Olivier Avatar answered Sep 23 '22 17:09

Olivier


There's no variable that I know of. However, you can add the following hack to the start of your top-level CMakeLists.txt (before the project call) to control the output somewhat:

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

This overrides CMake's built-in message command and suppresses all STATUS and untyped messages, leaving the more important types to output correctly.

The output of e.g. a WARNING message will change from

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

to

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

Note that the actual line where the warning message was generated is listed in the call stack rather than being the first line of the output message.

Finally, this has no effect on the summary output which indicates success or failure of the configure attempt.

like image 41
Fraser Avatar answered Sep 21 '22 17:09

Fraser


set(CMAKE_MESSAGE_LOG_LEVEL "WARNING")

https://cmake.org/cmake/help/latest/variable/CMAKE_MESSAGE_LOG_LEVEL.html

like image 21
mcandre Avatar answered Sep 22 '22 17:09

mcandre