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_FILETARGET_LINKER_FILETARGET_SONAME_FILETARGET_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команда помещается в пулconsolepool. -
WORKING_DIRECTORY -
Выполняет команду в указанном рабочем каталоге. Если путь относительный, он будет интерпретироваться относительно каталога дерева сборки, соответствующего текущему каталогу исходного кода. Если параметр не указан, используется
CMAKE_CURRENT_BINARY_DIR.Добавлено в версии 3.13: Аргументы
WORKING_DIRECTORYмогут использоватьgenerator expressions.
Ninja Multi-Config
Добавлено в версии 3.20: add_custom_target поддерживает возможности генератора Ninja Multi-Config для сборки в разных конфигурациях. Дополнительные сведения см. в документации генератора.
См. также
© 2000–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/command/add_custom_target.html