Скажи, что cmake тихо

Есть ли переменная, которую я могу использовать в cmake, чтобы заставить ее действовать так, как будто она была передана -q? Было бы хорошо, потому что у меня очень модульная сборка, которая становится беспорядочной с выходом cmakes. Я использую его в проекте С++.

Ответ 1

Нет переменной, о которой я знаю. Однако вы можете добавить следующий хак к началу вашего 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)

Обратите внимание, что фактическая строка, в которой было создано предупреждающее сообщение, указана в стеке вызовов, а не является первой строкой выходного сообщения.

Наконец, это не влияет на итоговый вывод, который указывает на успех или неудачу попытки настройки.

Ответ 2

Начиная с cmake 3.1, установка CMAKE_INSTALL_MESSAGE также очень полезна. Например, set(CMAKE_INSTALL_MESSAGE LAZY) пропустит сообщения " set(CMAKE_INSTALL_MESSAGE LAZY) -- Up-to-date:.