ExternalProject
Создание пользовательских целей для сборки проектов во внешних деревьях
-
ExternalProject_Add -
Функция
ExternalProject_Addсоздаёт пользовательскую цель для управления этапами загрузки, обновления/патчинга, конфигурации, сборки, установки и тестирования внешнего проекта:ExternalProject_Add(<name> [<option>...])
Общие параметры:
-
DEPENDS <projects>... - Цели, от которых зависит проект
-
PREFIX <dir> - Корневой каталог для всего проекта
-
LIST_SEPARATOR <sep> - Разделитель, который будет заменён на ; в командных строках
-
TMP_DIR <dir> - Каталог для хранения временных файлов
-
STAMP_DIR <dir> - Каталог для хранения временных меток этапов
-
EXCLUDE_FROM_ALL 1 - Цель «all» не зависит от этой цели
Параметры этапа загрузки:
-
DOWNLOAD_NAME <fname> - Имя файла для сохранения (если это не конец URL)
-
DOWNLOAD_DIR <dir> - Каталог для сохранения загруженных файлов
-
DOWNLOAD_COMMAND <cmd>... - Команда для загрузки исходного дерева
-
DOWNLOAD_NO_PROGRESS 1 - Отключить сообщения о ходе загрузки
-
CVS_REPOSITORY <cvsroot> - CVSROOT CVS-репозитория
-
CVS_MODULE <mod> - Модуль для взятия из CVS-репозитория
-
CVS_TAG <tag> - Тег для взятия из CVS-репозитория
-
SVN_REPOSITORY <url> - URL репозитория Subversion
-
SVN_REVISION -r<rev> - Ревизия для взятия из репозитория Subversion
-
SVN_USERNAME <username> - Имя пользователя для взятия и обновления Subversion
-
SVN_PASSWORD <password> - Пароль для взятия и обновления Subversion
-
SVN_TRUST_CERT 1 - Доверять сертификату сайта сервера Subversion
-
GIT_REPOSITORY <url> - URL репозитория git
-
GIT_TAG <tag> - Имя ветки git, идентификатор коммита или тег
-
GIT_REMOTE_NAME <name> - Необязательное имя удалённого сервера, по умолчанию
origin -
GIT_SUBMODULES <module>... - Git подмодули, которые необходимо обновить, все, если пусто
-
GIT_SHALLOW 1 - Указать Git на клонирование с
--depth 1. Используйте, когдаGIT_TAGне указан или когда он называет ветку, чтобы загрузить только последнюю версию ветки без остальной её истории. -
HG_REPOSITORY <url> - URL репозитория mercurial
-
HG_TAG <tag> - Имя ветки mercurial, идентификатор коммита или тег
-
URL /.../src.tgz - Полный путь или URL исходного материала
-
URL_HASH ALGO=value - Хэш файла по URL
-
URL_MD5 md5 - Эквивалентно URL_HASH MD5=md5
-
TLS_VERIFY <bool> - Проверять ли сертификат для https
-
TLS_CAINFO <file> - Путь к файлу уполномочивающего центра сертификации
-
TIMEOUT <seconds> - Время, разрешённое для операций загрузки файлов
-
DOWNLOAD_NO_EXTRACT 1 - Просто загрузить файл и не извлекать его; полный путь к загруженному файлу доступен как
<DOWNLOADED_FILE>.
Параметры этапа обновления/патчинга:
-
UPDATE_COMMAND <cmd>... - Команда обновления рабочей области исходного кода
-
UPDATE_DISCONNECTED 1 - Никогда не обновлять автоматически из удалённого репозитория
-
PATCH_COMMAND <cmd>... - Команда для патчинга загруженного исходного кода
Параметры этапа конфигурации:
-
SOURCE_DIR <dir> - Исходный каталог, используемый для сборки
-
CONFIGURE_COMMAND <cmd>... - Команда конфигурации дерева сборки
-
CMAKE_COMMAND /.../cmake - Указать альтернативную программу cmake
-
CMAKE_GENERATOR <gen> - Указать генератор для нативной сборки
-
CMAKE_GENERATOR_PLATFORM <platform> - Имя платформы, специфичное для генератора
-
CMAKE_GENERATOR_TOOLSET <toolset> - Имя набора инструментов, специфичное для генератора
-
CMAKE_ARGS <arg>... - Аргументы для командной строки CMake. Эти аргументы передаются в командную строку CMake и могут содержать аргументы, отличные от значений кэша, см. также
CMake Options. Аргументы в формате-Dvar:string=onвсегда передаются в командную строку и поэтому не могут быть изменены пользователем. Аргументы могут использоватьgenerator expressions. -
CMAKE_CACHE_ARGS <arg>... - Начальные аргументы кэша в формате
-Dvar:string=on. Эти аргументы записываются в скрипт предзагрузки, который заполняет кэш CMake, см. такжеcmake -C. Это позволяет обойти ограничения длины командной строки. Эти аргументыset()с помощью аргументаFORCE, и поэтому не могут быть изменены пользователем. Аргументы могут использоватьgenerator expressions. -
CMAKE_CACHE_DEFAULT_ARGS <arg>... - Начальные значения аргументов кэша по умолчанию в формате
-Dvar:string=on. Эти аргументы записываются в скрипт предзагрузки, который заполняет кэш CMake, см. такжеcmake -C. Это позволяет обойти ограничения длины командной строки. Эти аргументы могут быть использованы в качестве значения по умолчанию, которое будет установлено, если предыдущее значение не найдено в кэше, и которое пользователь может изменить позже. Аргументы могут использоватьgenerator expressions.
Параметры этапа сборки:
-
BINARY_DIR <dir> - Указать расположение каталога сборки
-
BUILD_COMMAND <cmd>... - Команда для запуска нативной сборки
-
BUILD_IN_SOURCE 1 - Использовать исходный каталог для каталога сборки
-
BUILD_ALWAYS 1 - Файл метки отсутствует, этап сборки всегда выполняется
-
BUILD_BYPRODUCTS <file>... - Файлы, которые будут сгенерированы командой сборки, но у которых время изменения может или не может быть обновлено последующими сборками.
Параметры этапа установки:
-
INSTALL_DIR <dir> - Префикс установки
-
INSTALL_COMMAND <cmd>... - Команда для запуска установки после сборки
Параметры этапа тестирования:
-
TEST_BEFORE_INSTALL 1 - Добавить шаг тестирования, выполняемый до этапа установки
-
TEST_AFTER_INSTALL 1 - Добавить шаг тестирования, выполняемый после этапа установки
-
TEST_EXCLUDE_FROM_MAIN 1 - Основная цель не зависит от этапа тестирования
-
TEST_COMMAND <cmd>... - Команда для запуска тестирования
Параметры вывода протокола:
-
LOG_DOWNLOAD 1 - Обернуть загрузку в скрипт для протоколирования вывода
-
LOG_UPDATE 1 - Обернуть обновление в скрипт для протоколирования вывода
-
LOG_CONFIGURE 1 - Обернуть конфигурацию в скрипт для протоколирования вывода
-
LOG_BUILD 1 - Обернуть сборку в скрипт для протоколирования вывода
-
LOG_TEST 1 - Обернуть тестирование в скрипт для протоколирования вывода
-
LOG_INSTALL 1 - Обернуть установку в скрипт для протоколирования вывода
Шаги могут получить прямой доступ к терминалу, если это возможно. С генератором
Ninjaэто помещает шаги вconsolepool. Параметры:-
USES_TERMINAL_DOWNLOAD 1 - Предоставить загрузке доступ к терминалу.
-
USES_TERMINAL_UPDATE 1 - Предоставить обновлению доступ к терминалу.
-
USES_TERMINAL_CONFIGURE 1 - Предоставить конфигурации доступ к терминалу.
-
USES_TERMINAL_BUILD 1 - Предоставить сборке доступ к терминалу.
-
USES_TERMINAL_TEST 1 - Предоставить тестированию доступ к терминалу.
-
USES_TERMINAL_INSTALL 1 - Предоставить установке доступ к терминалу.
Другие параметры:
-
STEP_TARGETS <step-target>... - Генерировать пользовательские цели для этих этапов
-
INDEPENDENT_STEP_TARGETS <step-target>... - Генерировать пользовательские цели для этих этапов, которые не зависят от других внешних проектов, даже если зависимость установлена
Параметры
*_DIRзадают каталоги для проекта, с вычислением каталогов по умолчанию следующим образом. Если параметрPREFIXзадан дляExternalProject_Add()или свойство каталогаEP_PREFIXустановлено, то внешний проект собирается и устанавливается в указанном префиксе:TMP_DIR = <prefix>/tmp STAMP_DIR = <prefix>/src/<name>-stamp DOWNLOAD_DIR = <prefix>/src SOURCE_DIR = <prefix>/src/<name> BINARY_DIR = <prefix>/src/<name>-build INSTALL_DIR = <prefix>
В противном случае, если свойство каталога
EP_BASEустановлено, то компоненты внешнего проекта хранятся в указанном базовом каталоге:TMP_DIR = <base>/tmp/<name> STAMP_DIR = <base>/Stamp/<name> DOWNLOAD_DIR = <base>/Download/<name> SOURCE_DIR = <base>/Source/<name> BINARY_DIR = <base>/Build/<name> INSTALL_DIR = <base>/Install/<name>
Если не указан
PREFIX,EP_PREFIX, илиEP_BASE, то по умолчаниюPREFIXустанавливается в<name>-prefix. Относительные пути интерпретируются относительно каталога сборки, соответствующего каталогу исходного кода, в котором вызываетсяExternalProject_Add.Если
SOURCE_DIRявно установлен в существующий каталог, проект будет собран из него. В противном случае, шаг загрузки должен быть указан с помощью одного из параметровDOWNLOAD_COMMAND,CVS_*,SVN_*, илиURL. ПараметрURLможет ссылаться локально на каталог или архив исходного кода, или на удалённый архив (например,http://.../src.tgz).Если
UPDATE_DISCONNECTEDустановлен, этап обновления не выполняется автоматически при сборке основной цели. Этап обновления всё ещё может быть добавлен как целевой шаг и вызван вручную. Это полезно, если вы хотите позволить сборку проекта, когда вы отключены от сети (вам все равно может потребоваться сеть для этапа загрузки). По умолчанию это отключено. Свойство каталогаEP_UPDATE_DISCONNECTEDможет быть использовано для изменения значения по умолчанию для всех внешних проектов в текущем каталоге и его подкаталогах. -
-
ExternalProject_Add_Step -
Функция
ExternalProject_Add_Stepдобавляет пользовательский шаг во внешний проект:ExternalProject_Add_Step(<name> <step> [<option>...])
Доступные параметры:
-
COMMAND <cmd>... - Командная строка, вызываемая этим шагом
-
COMMENT "<text>..." - Текст, выводимый при выполнении шага
-
DEPENDEES <step>... - Шаги, от которых зависит этот шаг
-
DEPENDERS <step>... - Шаги, которые зависят от этого шага
-
DEPENDS <file>... - Файлы, от которых зависит этот шаг
-
BYPRODUCTS <file>... - Файлы, которые будут сгенерированы этим шагом, но время их модификации может не быть обновлено последующими сборками.
-
ALWAYS 1 - Файл отметки отсутствует, шаг всегда выполняется
-
EXCLUDE_FROM_MAIN 1 - Главная цель не зависит от этого шага
-
WORKING_DIRECTORY <dir> - Рабочая директория для команды
-
LOG 1 - Оборачивание шага в скрипт для логирования вывода
-
USES_TERMINAL 1 - Предоставить шагу прямой доступ к терминалу, если это возможно.
Командная строка, комментарий, рабочая директория и побочные продукты каждого стандартного и пользовательского шага обрабатываются для замены маркеров
<SOURCE_DIR>,<BINARY_DIR>,<INSTALL_DIR>, и<TMP_DIR>соответствующими значениями свойств. -
Любой встроенный шаг, который указывает <step>_COMMAND cmd..., или пользовательский шаг, который указывает COMMAND cmd..., может указать дополнительные командные строки в формате COMMAND cmd.... Во время сборки команды будут выполняться в порядке следования, и сборка прервется, если какая-либо из них завершится неудачно. Например:
... BUILD_COMMAND make COMMAND echo done ...
указывает на выполнение make, а затем echo done в ходе шага сборки. Сохранение текущей рабочей директории между командами не определено. Поведение операторов оболочки, таких как &&, не определено.
Аргументы для <step>_COMMAND или COMMAND опций могут использовать generator expressions.
-
ExternalProject_Get_Property -
Функция
ExternalProject_Get_Propertyизвлекает свойства целевых внешних проектов:ExternalProject_Get_Property(<name> [prop1 [prop2 [...]]])
Значения свойств сохраняются в переменных с одинаковыми именами. Имена свойств соответствуют именам аргументов ключевых слов в
ExternalProject_Add.
-
ExternalProject_Add_StepTargets -
Функция
ExternalProject_Add_StepTargetsгенерирует пользовательские цели для перечисленных шагов:ExternalProject_Add_StepTargets(<name> [NO_DEPENDS] [step1 [step2 [...]]])
Если NO_DEPENDS установлено, цель не будет зависеть от зависимостей всего проекта. Это обычно безопасно для шагов загрузки, обновления и исправления, которые не требуют обновления и сборки всех зависимостей. Использование NO_DEPENDS для других стандартных шагов может нарушить параллельную сборку, поэтому следует этого избегать. Для пользовательских шагов следует продумать, требуют ли пользовательские команды, чтобы зависимости были сконфигурированы, собраны и установлены.
Если STEP_TARGETS или INDEPENDENT_STEP_TARGETS установлены, то ExternalProject_Add_StepTargets автоматически вызывается в конце сопоставленных вызовов ExternalProject_Add_Step. Передайте STEP_TARGETS или INDEPENDENT_STEP_TARGETS явно отдельным вызовам ExternalProject_Add, или неявно всем вызовам ExternalProject_Add путём установки свойств директории EP_STEP_TARGETS и EP_INDEPENDENT_STEP_TARGETS. Версия INDEPENDENT аргумента и свойства будет вызывать ExternalProject_Add_StepTargets с аргументом NO_DEPENDS.
Если STEP_TARGETS и INDEPENDENT_STEP_TARGETS не установлены, клиенты всё ещё могут вручную вызвать ExternalProject_Add_StepTargets после вызова ExternalProject_Add или ExternalProject_Add_Step.
Эта функциональность предназначена для удобства управления шагами независимо друг от друга, указывая цели в командных строках сборки. Например, вы можете отправлять данные в панель управления подпроектом, где нужно управлять частью конфигурации сборки, затем отправлять данные в панель управления, за этим следует часть сборки, за которой следуют тесты. Если вы вызываете пользовательскую цель, которая зависит от шага посередине цепочки зависимостей шагов, все предыдущие шаги также будут выполнены для обеспечения актуальности всего.
Например, чтобы управлять шагами конфигурации, сборки и тестирования независимо для каждого вызова ExternalProject_Add в вашем проекте, запишите следующую строку перед любыми вызовами ExternalProject_Add в вашем файле CMakeLists.txt:
set_property(DIRECTORY PROPERTY EP_STEP_TARGETS configure build test)
-
ExternalProject_Add_StepDependencies -
Функция
ExternalProject_Add_StepDependenciesдобавляет зависимости для шагов внешнего проекта:ExternalProject_Add_StepDependencies(<name> <step> [target1 [target2 [...]]])
Эта функция заботится о настройке зависимостей на уровне целей и файлов и гарантирует, что параллельная сборка не будет нарушена. Её следует использовать вместо
add_dependencies()при добавлении зависимостей для некоторых целевых шагов, сгенерированныхExternalProject.
© 2000–2019 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.6/module/ExternalProject.html