Есть ли переменная, которую я могу использовать в cmake, чтобы заставить ее действовать так, как будто она была передана -q? Было бы хорошо, потому что у меня очень модульная сборка, которая становится беспорядочной с выходом cmakes. Я использую его в проекте С++.
Скажи, что cmake тихо
Ответ 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:
.