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 с указанным <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–2023 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.26/command/message.html