Spec-Zone.ru › CMake

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, эта команда ничего не делает.

См. также

  • cmake_language(GET_MESSAGE_LOG_LEVEL)

© 2000–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/command/message.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API