Spec-Zone.ru › CMake

cmake_diagnostic

Добавлено в версии 4.4.

Управление параметрами диагностики CMake. Список доступных категорий см. в руководстве cmake-diagnostics(7).

Краткое описание

Setting Diagnostics
  cmake_diagnostic(SET <category> <action> [RECURSE])
  cmake_diagnostic(PROMOTE <category> <action> [NO_RECURSE])
  cmake_diagnostic(DEMOTE <category> <action> [NO_RECURSE])

Checking Diagnostic Actions
  cmake_diagnostic(GET <diagnostic> <out-var>)

CMake Diagnostic Stack
  cmake_diagnostic(PUSH)
  cmake_diagnostic(POP)

Настройка диагностики

cmake_diagnostic(SET CMD_<CATEGORY> <action> [RECURSE])
cmake_diagnostic(PROMOTE CMD_<CATEGORY> <action> [NO_RECURSE])
cmake_diagnostic(DEMOTE CMD_<CATEGORY> <action> [NO_RECURSE])

Задать или изменить действие, выполняемое при возникновении диагностики, относящейся к определённой категории.

Подкоманда SET задаёт действие для указанной категории диагностики. Подкоманда PROMOTE повышает серьёзность для указанной категории диагностики или ничего не делает, если уже задано действие с такой же или более высокой серьёзностью. Подкоманда DEMOTE понижает серьёзность для указанной категории диагностики или ничего не делает, если уже задано действие с такой же или более низкой серьёзностью.

Возможные действия <action> (в порядке возрастания серьёзности):

IGNORE

Ничего не делать.

WARN

Выдать предупреждение и продолжить обработку.

SEND_ERROR

Выдать ошибку, продолжить обработку, но пропустить генерацию.

Исполняемый файл cmake(1) вернёт ненулевой код завершения.

FATAL_ERROR

Выдать ошибку, остановить обработку и генерацию.

Исполняемый файл cmake(1) вернёт ненулевой код завершения.

Некоторые категории диагностики имеют иерархическую структуру. Параметры RECURSE и NO_RECURSE определяют, изменяет ли изменение действия для категории диагностики также какие-либо дочерние категории. По умолчанию подкоманды PROMOTE и DEMOTE выполняются рекурсивно, а подкоманда SET — нет. Обратите внимание: изменение дочерних категорий не зависит от ранее заданного действия для родительских категорий; то есть PROMOTE и DEMOTE при рекурсивном выполнении будут применяться ко всем дочерним категориям, даже если действие родительской категории не менялось.

Проверка действий диагностики

cmake_diagnostic(GET CMD_<CATEGORY> <variable>)

Проверить, какое действие в данный момент задано для категории диагностики. Выходное значение <variable> будет одним из следующих: IGNORE, WARN, SEND_ERROR или FATAL_ERROR.

Стек диагностики CMake

CMake хранит параметры диагностики в стеке, поэтому изменения, внесённые командой cmake_diagnostic, затрагивают только вершину стека. Для каждого подкаталога автоматически создаётся новая запись в стеке диагностики, чтобы защитить его родительские и соседние каталоги. CMake также создаёт новую запись для скриптов, загруженных командами include() и find_package(), кроме случаев вызова с параметром NO_DIAGNOSTIC_SCOPE. Команда cmake_diagnostic предоставляет интерфейс для управления пользовательскими записями в стеке диагностики:

cmake_diagnostic(PUSH)

Создать новую запись в стеке диагностики.

cmake_diagnostic(POP)

Удалить последнюю запись стека диагностики, созданную с помощью cmake_diagnostic(PUSH).

Каждому вызову PUSH должен соответствовать вызов POP, чтобы отменить все изменения. Это позволяет временно изменять параметры диагностики. Вызовы команд cmake_diagnostic(SET), cmake_diagnostic(PROMOTE) или cmake_diagnostic(DEMOTE) изменяют только текущую вершину стека диагностики.

Команда block(SCOPE_FOR DIAGNOSTICS) предоставляет более гибкий и надёжный способ управления стеком диагностики. При выходе из области действия блока запись автоматически удаляется, поэтому перед каждым вызовом return() нет необходимости вызывать cmake_diagnostic(POP).

# stack management with cmake_diagnostic()
function(my_func)
  cmake_diagnostic(PUSH)
  cmake_diagnostic(SET ...)
  if (<cond1>)
    ...
    cmake_diagnostic(POP)
    return()
  elseif(<cond2>)
    ...
    cmake_diagnostic(POP)
    return()
  endif()
  ...
  cmake_diagnostic(POP)
endfunction()

# stack management with block()/endblock()
function(my_func)
  block(SCOPE_FOR DIAGNOSTICS)
    cmake_diagnostic(SET ...)
    if (<cond1>)
      ...
      return()
    elseif(<cond2>)
      ...
      return()
    endif()
    ...
  endblock()
endfunction()

Команды, созданные с помощью команд function() и macro(), сохраняют параметры диагностики на момент создания и используют сохранённые параметры при вызове. Если реализация функции или макроса задаёт параметры диагностики, изменения автоматически распространяются вверх по цепочке вызовов, пока не достигнут ближайшей вложенной записи стека диагностики.

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

Spec-Zone.ru

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