Freigeben über


vcpkg_extract_source_archive

Extrahieren sie ein Archiv.

Verwendung

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

Parameter

<out-var>

Name der Variablen, die mit dem Verzeichnis festgelegt werden soll, das den extrahierten Inhalt enthält.

ARCHIVE

Vollständiger Pfad zum zu extrahierenden Archiv.

NO_REMOVE_ONE_LEVEL

Überspringen Sie das Entfernen des Verzeichnisses der obersten Ebene des Archivs.

Die meisten Archive enthalten ein einzelnes Verzeichnis auf oberster Ebene, z. B.:

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

Entfernt dieses Verzeichnis standardmäßig vcpkg_extract_source_archive und verschiebt alle Inhalte in das zurückgegebene <out-var>Verzeichnis. Wenn kein Verzeichnis auf oberster Ebene vorhanden ist, ist dies ein Fehler.

Mit dieser Kennzeichnung wird das Verzeichnis der obersten Ebene beibehalten, und es handelt sich nicht um einen Fehler, der nicht vorhanden ist.

SKIP_PATCH_CHECK

Stillen und Ignorieren von Fehlern beim Anwenden von Patches.

Diese Option sollte nur übergeben werden, wenn sie in einem instabilen Modus wie --head. Wenn die Quellen angeheftet sind, sollte ein Patch nicht angewendet werden, als schwerwiegender Fehler angesehen werden.

PATCHES

Liste der Patches, die auf die extrahierte Quelle angewendet werden sollen.

Patches werden in der Reihenfolge angewendet, nachdem alle Verzeichnisse der obersten Ebene entfernt wurden (siehe NO_REMOVE_ONE_LEVEL). Relative Pfade werden relativ zum aktuellen Portverzeichnis interpretiert.

Wenn ein Patch basierend auf Zielinformationen bedingt angewendet werden soll, können Sie eine Liste erstellen und sie splatieren.

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

Ziemlicher Name für das extrahierte Verzeichnis.

Darf keine Pfadtrennzeichen (/ oder \\) enthalten.

Weitere Informationen finden Sie unter WORKING_DIRECTORY.

BASE_DIRECTORY

Stammunterordner für das extrahierte Verzeichnis.

Wird standardmäßig auf src festgelegt. Muss ein relativer Pfad sein.

Weitere Informationen finden Sie unter WORKING_DIRECTORY.

WORKING_DIRECTORY

Stammordner für das extrahierte Verzeichnis.

Wird standardmäßig auf ${CURRENT_BUILDTREES_DIR}/<BASE_DIRECTORY> festgelegt. Muss ein absoluter Pfad sein.

vcpkg_extract_source_archive extrahiert das Archiv in <WORKING_DIRECTORY>/<SOURCE_BASE>-<short-hash>.clean. Wenn der Ordner vorhanden ist, wird er vor der Extraktion gelöscht. SOURCE_BASEOhne Angabe von , BASE_DIRECTORYoder WORKING_DIRECTORY, wird dies standardmäßig auf ${CURRENT_BUILDTREES_DIR}/src/<archive-stem>-<short-hash>.clean.

Im --editable Modus:

  1. Dem extrahierten Ordner wird kein .clean Suffix hinzugefügt.
  2. Der extrahierte Ordner wird nicht gelöscht. Wenn es vorhanden ist, vcpkg_extract_source_archive führt nichts aus.

<short-hash> identifiziert eindeutig einen bestimmten Satz von Archiv- und Patchdateiinhalten. Alle Änderungen am Inhalt des Arbeitsverzeichnisses nach dem Aufrufen dieser Funktion sollten bedingungslos angewendet werden, um unerwartetes Verhalten im bearbeitbaren Modus zu vermeiden.

Beispiele

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

Hinweise

Veraltete Syntax

Dieser Befehl unterstützt auch eine veraltete Überladung:

vcpkg_extract_source_archive(<archive> [<working_directory>])

Die veralteten Überladungsextrakte <archive>${working_directory}/<archive-filename>.extracted werden extrahiert, wenn das Ziel nicht vorhanden ist. Dieses falsche Verhalten ermöglicht Patches und andere Änderungen, die zwischen verschiedenen Builds verloren gehen, was zu schwer zu debuggenden Fehlern führt.

Alle Verwendungen der veralteten Überladung sollten durch die oben genannte Syntax ersetzt werden, indem sie einen expliziten ARCHIVE Parameter hinzufügen und direkte Verweise auf den extrahierten Pfad durch Verwendungen des <out-var>extrahierten Pfads ersetzen.

Ersatz

Dieser Befehl ersetzt vcpkg_extract_source_archive_ex().

Quelle

scripts/cmake/vcpkg_extract_source_archive.cmake