Поделиться через


vcpkg_extract_source_archive

Извлечение архива.

Использование

vcpkg_extract_source_archive(
    <out-var>
    ARCHIVE <path>
    [NO_REMOVE_ONE_LEVEL]
    [SKIP_PATCH_CHECK]
    [PATCHES <patch>...]
    [SOURCE_BASE <base>]
    [BASE_DIRECTORY <relative-path> | WORKING_DIRECTORY <absolute-path>]
)

Параметры

<out-var>

Имя переменной, заданной с каталогом, содержащим извлеченное содержимое.

АРХИВ

Полный путь к архиву для извлечения.

NO_REMOVE_ONE_LEVEL

Пропустите удаление каталога верхнего уровня архива.

Большинство архивов содержат один каталог верхнего уровня, например:

zlib-1.2.11/
    doc/
        ...
    examples/
        ...
    ChangeLog
    CMakeLists.txt
    README
    zlib.h
    ...

По умолчанию vcpkg_extract_source_archive удаляет этот каталог и перемещает все содержимое в каталог, возвращенный в <out-var>. Если каталог верхнего уровня отсутствует, это ошибка.

С помощью этого флага каталог верхнего уровня будет сохранен, и он не является ошибкой, чтобы не иметь его.

SKIP_PATCH_CHECK

Молчание и пропуск ошибок при применении исправлений.

Этот параметр следует передавать только при работе в нестабильном режиме, например --head. Если источники закреплены, не удается применить исправление, следует считать неустранимой ошибкой.

ПАТЧИ

Список исправлений для применения к извлеченного источника.

Исправления будут применены в порядке после удаления всех каталогов верхнего уровня (см. раздел NO_REMOVE_ONE_LEVEL). Относительные пути интерпретируются относительно текущего каталога портов.

Если исправление должно быть условно применено на основе целевых сведений, можно создать список и сплатить его.

set(patches "")
if(VCPKG_TARGET_IS_WINDOWS)
    list(APPEND patches only-windows.patch)
endif()
vcpkg_extract_source_archive(src
    ARCHIVE "${archive}"
    PATCHES
        always-applied.patch
        ${patches}
)

SOURCE_BASE

Довольно имя извлеченного каталога.

Не должен содержать разделители путей (/ или \\).

Дополнительные сведения см. в статье WORKING_DIRECTORY.

BASE_DIRECTORY

Корневой вложенный каталог для извлеченного каталога.

По умолчанию — src. Должен быть относительным путем.

Дополнительные сведения см. в статье WORKING_DIRECTORY.

WORKING_DIRECTORY

Корневая папка для извлеченного каталога.

По умолчанию — ${CURRENT_BUILDTREES_DIR}/<BASE_DIRECTORY>. Должен быть абсолютным путем.

vcpkg_extract_source_archive извлекает архив в <WORKING_DIRECTORY>/<SOURCE_BASE>-<short-hash>.clean. Если папка существует, она удаляется перед извлечением. Без указания SOURCE_BASE, BASE_DIRECTORYили WORKING_DIRECTORY, это значение по умолчанию ${CURRENT_BUILDTREES_DIR}/src/<archive-stem>-<short-hash>.clean.

В режиме --editable :

  1. Суффикс не .clean добавляется в извлеченную папку
  2. Извлеченная папка не удаляется. Если он существует, vcpkg_extract_source_archive ничего не делает.

<short-hash> Однозначно идентифицирует определенный набор содержимого архива и исправления. Любые изменения содержимого рабочего каталога после вызова этой функции следует применять безоговорочно, чтобы избежать непредвиденного поведения в редактируемом режиме.

Примеры

vcpkg_download_distfile(
    archive # "archive" is set to the path to the downloaded file
    URLS "https://nmap.org/dist/nmap-7.70.tar.bz2"
    FILENAME "nmap-7.70.tar.bz2"
    SHA512 084c148b022ff6550e269d976d0077f7932a10e2ef218236fe13aa3a70b4eb6506df03329868fc68cb3ce78e4360b200f5a7a491d3145028fed679ef1c9ecae5
)
vcpkg_extract_source_archive(
    src # "src" is set to the path to the extracted files
    ARCHIVE "${archive}"
    SOURCE_BASE nmap.org-nmap-7.70
    PATCHES
        0001-disable-werror.patch
)
vcpkg_cmake_configure(SOURCE_PATH "${src}")

Замечания

Устаревший синтаксис

Эта команда также поддерживает устаревшую перегрузку:

vcpkg_extract_source_archive(<archive> [<working_directory>])

Нерекомендуемая перегрузка извлекается <archive> в ${working_directory}/<archive-filename>.extracted случае, если целевой объект не существует. Это неправильное поведение позволяет исправлениям и другим изменениям утечки между разными сборками, что приводит к ошибкам, которые трудно выполнять отладку.

Все использование нерекомендуемой перегрузки должно быть заменено синтаксисом,приведенным выше, путем добавления явного параметра и замены прямых ARCHIVE ссылок на извлеченный путь с использованием этого <out-var>параметра.

Замена

Эта команда заменяет vcpkg_extract_source_archive_ex().

Оригинал

scripts/cmake/vcpkg_extract_source_archive.cmake