message
Записать сообщение в журнал.
Синтаксис
General messages message([<mode>] "message text" ...) Reporting checks message(<checkState> "message text" ...) Configure Log message(CONFIGURE_LOG <text>...)
Общие сообщения
message([<mode>] "message text" ...)
Записывает указанный текст сообщения в журнал. Если задано несколько строк сообщения, они объединяются в одно сообщение без разделителей между строками.
Необязательное ключевое слово <mode> определяет тип сообщения, который влияет на способ его обработки:
-
FATAL_ERROR -
Ошибка CMake: прекратить обработку и генерацию.
Исполняемый файл
cmake(1)вернёт ненулевой код выхода. -
SEND_ERROR -
Ошибка CMake: продолжить обработку, но пропустить генерацию.
-
WARNING -
Предупреждение CMake: продолжить обработку.
-
AUTHOR_WARNING -
Диагностическое сообщение CMake
CMD_AUTHOR. -
DEPRECATION -
Диагностическое сообщение CMake
CMD_DEPRECATED. -
(none) or NOTICE -
Важное сообщение, выводимое в stderr, чтобы привлечь внимание пользователя.
-
STATUS -
Основные важные сообщения, которые могут заинтересовать пользователей проекта. В идеале они должны быть краткими — не длиннее одной строки, но при этом информативными.
-
VERBOSE -
Подробные информационные сообщения для пользователей проекта. Они должны содержать дополнительные сведения, которые обычно не представляют интереса, но могут быть полезны тем, кто собирает проект и хочет лучше понять происходящее.
-
DEBUG -
Подробные информационные сообщения для разработчиков самого проекта, а не для пользователей, которые просто хотят его собрать. Обычно эти сообщения не представляют интереса для других пользователей, собирающих проект, и часто тесно связаны с деталями внутренней реализации.
-
TRACE -
Детализированные сообщения с низкоуровневыми сведениями о реализации. Сообщения этого уровня журнала обычно носят временный характер и, как правило, должны удаляться перед выпуском проекта, упаковкой файлов и т. п.
Добавлено в версии 3.15: Добавлены уровни NOTICE, VERBOSE, DEBUG и TRACE.
Инструмент командной строки CMake выводит сообщения от STATUS до TRACE в stdout, предваряя сообщение двумя дефисами и пробелом. Все остальные типы сообщений отправляются в stderr и не предваряются дефисами. CMake GUI отображает все сообщения в области журнала. curses interface показывает сообщения от STATUS до TRACE по одному в строке состояния, а остальные сообщения — в интерактивном всплывающем окне. Параметр командной строки --log-level для каждого из этих инструментов позволяет управлять тем, какие сообщения будут показаны.
Добавлено в версии 3.17: Чтобы сохранять уровень журнала между запусками CMake, вместо этого можно задать переменную CMAKE_MESSAGE_LOG_LEVEL. Обратите внимание, что параметр командной строки имеет приоритет над переменной кэша.
Добавлено в версии 3.16: Каждая строка сообщений уровня журнала NOTICE и ниже предваряется содержимым переменной CMAKE_MESSAGE_INDENT (преобразованным в одну строку путём объединения элементов списка). Для сообщений от STATUS до TRACE это содержимое отступа вставляется после дефисов.
Добавлено в версии 3.17: Каждая строка сообщений уровня журнала NOTICE и ниже также может предваряться контекстом вида [some.context.example]. Содержимое квадратных скобок формируется преобразованием переменной-списка CMAKE_MESSAGE_CONTEXT в строку с точками в качестве разделителей. Контекст сообщения всегда выводится перед содержимым отступа, но после автоматически добавляемых начальных дефисов. По умолчанию контекст сообщения не отображается: для его включения необходимо указать параметр командной строки cmake --log-context или установить переменную CMAKE_MESSAGE_CONTEXT_SHOW в значение true. Примеры использования см. в документации CMAKE_MESSAGE_CONTEXT.
Текст предупреждений и ошибок CMake отображается с помощью простого языка разметки. Текст без отступа форматируется в абзацы с переносом строк; абзацы разделяются символами новой строки. Текст с отступом считается предварительно отформатированным.
Отчёты о проверках
Добавлено в версии 3.17.
В выводе CMake часто встречается сообщение о начале проверки, за которым следует сообщение с её результатом. Например:
message(STATUS "Looking for someheader.h") #... do the checks, set checkSuccess with the result if(checkSuccess) message(STATUS "Looking for someheader.h - found") else() message(STATUS "Looking for someheader.h - not found") endif()
Этот шаблон можно более надёжно и удобно выразить с помощью формы команды message() с ключевым словом CHECK_...:
message(<checkState> "message" ...)
где <checkState> должно быть одним из следующих значений:
-
CHECK_START -
Записать краткое сообщение о проверке, которая будет выполнена.
-
CHECK_PASS -
Записать успешный результат проверки.
-
CHECK_FAIL -
Записать неуспешный результат проверки.
При записи результата проверки команда повторяет сообщение о последней начатой проверке, для которой ещё не был указан результат, затем выводит разделители и текст сообщения, заданный после ключевого слова CHECK_PASS или CHECK_FAIL. Сообщения о проверках всегда выводятся на уровне журнала STATUS.
Проверки могут быть вложенными, и для каждой CHECK_START должна быть ровно одна соответствующая CHECK_PASS или CHECK_FAIL. При необходимости для добавления отступов к вложенным проверкам также можно использовать переменную CMAKE_MESSAGE_INDENT. Например:
message(CHECK_START "Finding my things")
list(APPEND CMAKE_MESSAGE_INDENT " ")
unset(missingComponents)
message(CHECK_START "Finding partA")
# ... do check, assume we find A
message(CHECK_PASS "found")
message(CHECK_START "Finding partB")
# ... do check, assume we don't find B
list(APPEND missingComponents B)
message(CHECK_FAIL "not found")
list(POP_BACK CMAKE_MESSAGE_INDENT)
if(missingComponents)
message(CHECK_FAIL "missing components: ${missingComponents}")
else()
message(CHECK_PASS "all components found")
endif()
Результат выполнения приведённого выше кода будет выглядеть примерно так:
-- Finding my things -- Finding partA -- Finding partA - found -- Finding partB -- Finding partB - not found -- Finding my things - missing components: B
Журнал конфигурации
Добавлено в версии 3.26.
message(CONFIGURE_LOG <text>...)
Записывает событие сообщения в журнале конфигурации с указанным значением <text>. Согласно принятому соглашению, если текст содержит несколько строк, первая строка должна быть кратким описанием события.
Этот режим предназначен для записи сведений о проверке системы или другой разовой операции, выполняемой при наличии записи в кэше, но не с помощью try_compile() или try_run(), которые автоматически записывают сведения о своей работе. Проектам следует избегать вызова этой команды при каждом запуске CMake. Например:
if (NOT DEFINED MY_CHECK_RESULT)
# Print check summary in configure output.
message(CHECK_START "My Check")
# ... perform system inspection, e.g., with execute_process ...
# Cache the result so we do not run the check again.
set(MY_CHECK_RESULT "${MY_CHECK_RESULT}" CACHE INTERNAL "My Check")
# Record the check details in the cmake-configure-log.
message(CONFIGURE_LOG
"My Check Result: ${MY_CHECK_RESULT}\n"
"${details}"
)
# Print check result in configure output.
if(MY_CHECK_RESULT)
message(CHECK_PASS "passed")
else()
message(CHECK_FAIL "failed")
endif()
endif()
Если в данный момент не выполняется настройка проекта, например в режиме обработки скриптов cmake -P, эта команда ничего не делает.
См. также
© 2000–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/command/message.html