add_custom_target
Добавить цель без вывода, чтобы она всегда строилась.
add_custom_target(Name [ALL] [command1 [args1...]]
[COMMAND command2 [args2...] ...]
[DEPENDS depend depend depend ... ]
[BYPRODUCTS [files...]]
[WORKING_DIRECTORY dir]
[COMMENT comment]
[JOB_POOL job_pool]
[VERBATIM] [USES_TERMINAL]
[COMMAND_EXPAND_LISTS]
[SOURCES src1 [src2...]])
Добавляет цель с заданным именем, которая выполняет заданные команды. Цель не имеет выходного файла и всегда считается устаревшей, даже если команды пытаются создать файл с именем цели. Используйте команду add_custom_command(), чтобы сгенерировать файл с зависимостями. По умолчанию от пользовательской цели ничего не зависит. Используйте команду add_dependencies(), чтобы добавить зависимости к другим целям или от других целей.
Параметры:
-
ALL -
Указывает, что эта цель должна быть добавлена к целевому построению по умолчанию, чтобы она выполнялась каждый раз (команда не может быть вызвана
ALL). -
BYPRODUCTS -
Новая в версии 3.2.
Указывает файлы, которые ожидается создать команде, но время изменения которых может или может не обновляться при последующих сборках. Если имя побочного продукта является относительным путем, оно будет интерпретироваться относительно каталога дерева сборки, соответствующего текущему каталогу исходного кода. Каждый файл побочного продукта будет автоматически помечен свойством файла-источника
GENERATED.Явное указание побочных продуктов поддерживается генератором
Ninja, чтобы сообщить инструменту сборкиninjaо том, как перегенерировать побочные продукты, если они отсутствуют. Это также полезно, когда другие правила сборки (например, пользовательские команды) зависят от побочных продуктов. Ninja требует правила сборки для любого сгенерированного файла, от которого зависит другое правило, даже если есть только зависимости по порядку, чтобы убедиться, что побочные продукты будут доступны до сборки их зависимых.Генераторы Makefile удалят
BYPRODUCTSи другие файлыGENERATEDво времяmake clean.Новая в версии 3.20: Аргументы к
BYPRODUCTSмогут использовать ограниченный наборgenerator expressions. Зависимые от целевых выражения не допускаются. -
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 -
Отобразить указанное сообщение перед выполнением команд во время сборки.
-
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 во время сборки. -
SOURCES -
Укажите дополнительные файлы исходного кода, которые должны быть включены в пользовательскую цель. Указанные файлы исходного кода будут добавлены в файлы проекта IDE для удобства редактирования, даже если у них нет правил построения.
-
VERBATIM -
Все аргументы команд будут должным образом экранированы для инструмента сборки, чтобы вызванная команда получала каждый аргумент без изменений. Обратите внимание, что один уровень экранирования по-прежнему используется процессором языка CMake перед тем, как
add_custom_targetдаже увидит аргументы. Рекомендуется использованиеVERBATIM, так как это обеспечивает правильное поведение. ЕслиVERBATIMне задано, поведение зависит от платформы, так как нет защиты от специальных символов, специфичных для инструмента. -
USES_TERMINAL -
Новая в версии 3.2.
Команда получит прямой доступ к терминалу, если это возможно. С генератором
Ninjaэто помещает команду вconsoleпулpool. -
WORKING_DIRECTORY -
Выполнить команду с заданным текущим каталогом. Если это относительный путь, он будет интерпретироваться относительно каталога дерева сборки, соответствующего текущему каталогу исходного кода.
Новая в версии 3.13: Аргументы к
WORKING_DIRECTORYмогут использоватьgenerator expressions.
Ninja Multi-Config
Новое в версии 3.20: add_custom_target поддерживает возможности кросс-конфигурации генератора Ninja Multi-Config. Для получения дополнительной информации см. документацию по генератору.
© 2000–2022 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.23/command/add_custom_target.html