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

Записать событие сообщения журнала конфигурации с указанным <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/latest/command/message.html

Spec-Zone.ru

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