Spec-Zone.ru › CMake 3.28

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 (dev), продолжить обработку.

DEPRECATION

Ошибка или предупреждение об устаревании CMake, если переменная CMAKE_ERROR_DEPRECATED или CMAKE_WARN_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()

Это можно более надёжно и удобно выразить с помощью ключевого слова CHECK_... в команде message():

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

Записать событие журнала конфигурации configure-log message event с указанным <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–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.27/command/message.html

Spec-Zone.ru

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