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_BASE
Ohne Angabe von , BASE_DIRECTORY
oder WORKING_DIRECTORY
, wird dies standardmäßig auf ${CURRENT_BUILDTREES_DIR}/src/<archive-stem>-<short-hash>.clean
.
Im --editable
Modus:
- Dem extrahierten Ordner wird kein
.clean
Suffix hinzugefügt. - 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()
.