Spec-Zone.ru › CMake

add_custom_target

Добавляет цель без выходных файлов, поэтому она всегда будет собираться.

add_custom_target(Name [ALL] [command1 [<args1>...]]
                  [COMMAND command2 [<args2>...]] ...
                  [DEPENDS <depend>...]
                  [BYPRODUCTS <file>...]
                  [WORKING_DIRECTORY <dir>]
                  [COMMENT <comment>]
                  [JOB_POOL <job_pool>]
                  [JOB_SERVER_AWARE <bool>]
                  [VERBATIM] [USES_TERMINAL]
                  [COMMAND_EXPAND_LISTS]
                  [SOURCES <source>...])

Добавляет цель с указанным именем, которая выполняет заданные команды. У цели нет выходного файла, и она всегда считается устаревшей, даже если команды пытаются создать файл с именем цели. Используйте команду add_custom_command(), чтобы создать файл с зависимостями. По умолчанию от пользовательской цели ничего не зависит. Используйте команду add_dependencies(), чтобы добавить зависимости от других целей или зависимости других целей от этой.

Доступны следующие параметры:

ALL

Указывает, что эту цель следует добавить в цель сборки по умолчанию, чтобы она выполнялась при каждой сборке (эту команду нельзя вызывать ALL).

BYPRODUCTS

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

Указывает файлы, которые, как предполагается, будут созданы командой, но время изменения которых при последующих сборках может обновляться, а может и нет. Если имя побочного продукта — относительный путь, оно будет интерпретироваться относительно каталога дерева сборки, соответствующего текущему каталогу исходного кода. Для каждого файла-побочного продукта автоматически устанавливается свойство исходного файла GENERATED.

О причинах появления этой возможности см. политику CMP0058.

Явное указание побочных продуктов поддерживается генератором Ninja, чтобы сообщить инструменту сборки ninja, как повторно создать побочные продукты, если они отсутствуют. Это также полезно, когда от побочных продуктов зависят другие правила сборки (например, пользовательские команды). Ninja требует наличия правила сборки для каждого созданного файла, от которого зависит другое правило, даже если зависимости только задают порядок, чтобы гарантировать доступность побочных продуктов до сборки зависимых от них целей.

Генераторы Makefile удаляют BYPRODUCTS и другие файлы GENERATED во время make clean.

Добавлено в версии 3.20: Аргументы BYPRODUCTS могут использовать ограниченный набор generator expressions. Выражения, зависящие от цели не допускаются.

Изменено в версии 3.28: В пользовательских целях, использующих Наборы файлов, побочные продукты теперь считаются закрытыми, если они не указаны в открытом наборе файлов. См. политику CMP0154.

COMMAND

Указывает команду или команды, которые будут выполняться во время сборки. Если указано несколько COMMAND, они будут выполнены по порядку, но не обязательно объединены в сценарий оболочки или пакетный сценарий с общим состоянием. (Чтобы запустить полноценный сценарий, используйте команду configure_file() или команду file(GENERATE), чтобы создать его, а затем укажите COMMAND для его запуска.)

Если COMMAND указывает имя исполняемой цели (созданной командой add_executable()), оно будет автоматически заменено на путь к исполняемому файлу, созданному во время сборки, если выполняется одно из следующих условий:

  • Цель не собирается с кросс-компиляцией (то есть переменной CMAKE_CROSSCOMPILING не присвоено значение true).
  • Добавлено в версии 3.6: Цель собирается с кросс-компиляцией и для неё предоставлен эмулятор (то есть установлено свойство цели CROSSCOMPILING_EMULATOR). В этом случае содержимое CROSSCOMPILING_EMULATOR будет добавлено перед путём к исполняемому файлу цели.

Если ни одно из приведённых выше условий не выполнено, предполагается, что имя команды — это программа, которую нужно найти в PATH во время сборки.

Аргументы COMMAND могут использовать generator expressions. Используйте генераторное выражение TARGET_FILE, чтобы сослаться на путь к цели далее в командной строке (то есть как на аргумент команды, а не как на выполняемую команду).

При использовании любого из следующих генераторных выражений, связанных с целью, в качестве выполняемой команды или в аргументе команды автоматически добавляется зависимость на уровне цели, чтобы указанная цель собиралась до этой пользовательской цели (см. политику CMP0112).

  • TARGET_FILE
  • TARGET_LINKER_FILE
  • TARGET_SONAME_FILE
  • TARGET_PDB_FILE

Команда и аргументы необязательны. Если они не указаны, будет создана пустая цель.

COMMENT

Выводит указанное сообщение перед выполнением команд во время сборки.

Добавлено в версии 3.26: Аргументы COMMENT могут использовать generator expressions.

DEPENDS

Ссылается на файлы и результаты пользовательских команд, созданных вызовами команды add_custom_command() в том же каталоге (файл CMakeLists.txt). Они будут обновлены при сборке цели.

Изменено в версии 3.16: Если какая-либо зависимость является побочным продуктом цели или одного из её событий сборки в том же каталоге, добавляется зависимость на уровне цели, чтобы гарантировать доступность побочных продуктов до сборки этой цели.

Для добавления зависимостей от других целей используйте команду add_dependencies().

COMMAND_EXPAND_LISTS

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

Списки в аргументах COMMAND будут развёрнуты, в том числе списки, созданные с помощью generator expressions. Это позволяет корректно разворачивать такие аргументы COMMAND, как ${CC} "-I$<JOIN:$<TARGET_PROPERTY:foo,INCLUDE_DIRECTORIES>,;-I>" foo.cc.

JOB_POOL

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

Указывает pool для генератора Ninja. Несовместим с USES_TERMINAL, который подразумевает пул console. Использование пула, не определённого в JOB_POOLS, приводит к ошибке Ninja во время сборки.

JOB_SERVER_AWARE

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

Указывает, что команда поддерживает сервер заданий GNU Make.

Для генераторов Unix Makefiles, MSYS Makefiles и MinGW Makefiles к строке рецепта будет добавлен префикс +. Дополнительные сведения см. в документации GNU Make.

Другие генераторы молча игнорируют этот параметр.

SOURCES

Указывает дополнительные исходные файлы, включаемые в пользовательскую цель. Указанные исходные файлы будут добавлены в файлы проектов IDE для удобства редактирования, даже если для них нет правил сборки.

VERBATIM

Все аргументы команд будут корректно экранированы для инструмента сборки, чтобы вызываемая команда получила каждый аргумент без изменений. Обратите внимание, что обработчик языка CMake всё ещё выполняет один уровень экранирования до того, как add_custom_target получит аргументы. Рекомендуется использовать VERBATIM, поскольку это обеспечивает корректное поведение. Если VERBATIM не указан, поведение зависит от платформы, так как специальные символы, используемые инструментом, не защищаются.

USES_TERMINAL

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

Команде будет предоставлен прямой доступ к терминалу, если это возможно. При использовании генератора Ninja команда помещается в пул console pool.

WORKING_DIRECTORY

Выполняет команду в указанном рабочем каталоге. Если путь относительный, он будет интерпретироваться относительно каталога дерева сборки, соответствующего текущему каталогу исходного кода. Если параметр не указан, используется CMAKE_CURRENT_BINARY_DIR.

Добавлено в версии 3.13: Аргументы WORKING_DIRECTORY могут использовать generator expressions.

Ninja Multi-Config

Добавлено в версии 3.20: add_custom_target поддерживает возможности генератора Ninja Multi-Config для сборки в разных конфигурациях. Дополнительные сведения см. в документации генератора.

См. также

  • add_custom_command()

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

Spec-Zone.ru

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