Compartir a través de


vcpkg_extract_source_archive

Extraiga un archivo.

Uso

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>]
)

Parámetros

<out-var>

Nombre de la variable que se va a establecer con el directorio que contiene el contenido extraído.

ARCHIVE

Ruta de acceso completa al archivo que se va a extraer.

NO_REMOVE_ONE_LEVEL

Omita quitar el directorio de nivel superior del archivo.

La mayoría de los archivos contienen un único directorio de nivel superior, como:

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

De forma predeterminada, vcpkg_extract_source_archive quita este directorio y mueve todo el contenido al directorio devuelto en <out-var>. Si no hay ningún directorio de nivel superior, se produce un error.

Con esta marca, se conservará el directorio de nivel superior y no es un error para no tener uno.

SKIP_PATCH_CHECK

Silenciar y omitir errores al aplicar revisiones.

Esta opción solo debe pasarse cuando se trabaja en un modo inestable, como --head. Si los orígenes están anclados, si no se aplica una revisión, se debe considerar un error irrecuperable.

PARCHES

Lista de revisiones que se van a aplicar al origen extraído.

Las revisiones se aplicarán en orden, después de quitar los directorios de nivel superior (consulte NO_REMOVE_ONE_LEVEL). Las rutas de acceso relativas se interpretan en relación con el directorio de puerto actual.

Si una revisión se debe aplicar condicionalmente en función de la información de destino, puede construir una lista y crear una placa.

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

Nombre bonito para el directorio extraído.

No debe contener separadores de ruta de acceso (/ o \\).

Consulte WORKING_DIRECTORY para obtener más detalles.

BASE_DIRECTORY

Subcarpeta raíz del directorio extraído.

Tiene como valor predeterminado src. Debe ser una ruta de acceso relativa.

Consulte WORKING_DIRECTORY para obtener más detalles.

WORKING_DIRECTORY

Carpeta raíz del directorio extraído.

Tiene como valor predeterminado ${CURRENT_BUILDTREES_DIR}/<BASE_DIRECTORY>. Debe ser una ruta de acceso absoluta.

vcpkg_extract_source_archive extrae el archivo en <WORKING_DIRECTORY>/<SOURCE_BASE>-<short-hash>.clean. Si la carpeta existe, se elimina antes de la extracción. Sin especificar SOURCE_BASE, BASE_DIRECTORYo WORKING_DIRECTORY, este valor predeterminado ${CURRENT_BUILDTREES_DIR}/src/<archive-stem>-<short-hash>.cleanserá .

En --editable modo:

  1. No .clean se agrega ningún sufijo a la carpeta extraída
  2. La carpeta extraída no se elimina. Si existe, vcpkg_extract_source_archive no hace nada.

<short-hash> identifica de forma inequívoca un conjunto determinado de contenido de archivos de archivo y revisión. Las modificaciones en el contenido del directorio de trabajo después de llamar a esta función se deben aplicar incondicionalmente para evitar un comportamiento inesperado en modo editable.

Ejemplos

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}")

Comentarios

Sintaxis en desuso

Este comando también admite una sobrecarga en desuso:

vcpkg_extract_source_archive(<archive> [<working_directory>])

La sobrecarga en desuso se <archive> extrae en ${working_directory}/<archive-filename>.extracted si el destino no existe. Este comportamiento incorrecto permite que las revisiones y otras modificaciones se filtren entre distintas compilaciones, lo que da lugar a errores difíciles de depurar.

Todos los usos de la sobrecarga en desuso deben reemplazarse por la sintaxis de Usage anterior agregando un parámetro explícito ARCHIVE y reemplazando las referencias directas a la ruta de acceso extraída por los usos de <out-var>.

Sustitución

Este comando reemplaza vcpkg_extract_source_archive_ex()a .

Source

scripts/cmake/vcpkg_extract_source_archive.cmake