Condividi tramite


vcpkg_extract_source_archive

Estrarre un archivio.

Utilizzo

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

Parametri

<out-var>

Nome della variabile da impostare con la directory contenente il contenuto estratto.

ARCHIVE

Percorso completo dell'archivio da estrarre.

NO_REMOVE_ONE_LEVEL

Ignorare la rimozione della directory di primo livello dell'archivio.

La maggior parte degli archivi contiene una singola directory di primo livello, ad esempio:

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

Per impostazione predefinita, vcpkg_extract_source_archive rimuove questa directory e sposta tutto il contenuto nella directory restituita in <out-var>. Se non è presente alcuna directory di primo livello, si tratta di un errore.

Con questo flag, la directory di primo livello verrà mantenuta e non si tratta di un errore di non averne uno.

SKIP_PATCH_CHECK

Silenzio e ignorare gli errori durante l'applicazione di patch.

Questa opzione deve essere passata solo quando si opera in modalità instabile, ad esempio --head. Se le origini vengono aggiunte, l'applicazione di una patch deve essere considerata un errore irreversibile.

PATCH

Elenco delle patch da applicare all'origine estratta.

Le patch verranno applicate in ordine, dopo la rimozione di tutte le directory di primo livello (vedere NO_REMOVE_ONE_LEVEL). I percorsi relativi vengono interpretati in relazione alla directory della porta corrente.

Se una patch deve essere applicata in modo condizionale in base alle informazioni di destinazione, è possibile creare un elenco e una splat.

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_BAedizione Standard

Nome abbastanza per la directory estratta.

Non deve contenere separatori di percorso (/ o \\).

Per informazioni dettagliate, vedere WORKING_DIRECTORY.

BA edizione Standard_DIRECTORY

Sottocartella radice per la directory estratta.

Il valore predefinito è src. Deve essere un percorso relativo.

Per informazioni dettagliate, vedere WORKING_DIRECTORY.

WORKING_DIRECTORY

Cartella radice per la directory estratta.

Il valore predefinito è ${CURRENT_BUILDTREES_DIR}/<BASE_DIRECTORY>. Deve essere un percorso assoluto.

vcpkg_extract_source_archive estrae l'archivio in <WORKING_DIRECTORY>/<SOURCE_BASE>-<short-hash>.clean. Se la cartella esiste, viene eliminata prima dell'estrazione. Senza specificare SOURCE_BASE, BASE_DIRECTORYo WORKING_DIRECTORY, per impostazione predefinita verrà impostato su ${CURRENT_BUILDTREES_DIR}/src/<archive-stem>-<short-hash>.clean.

In --editable modalità:

  1. Non .clean viene aggiunto alcun suffisso alla cartella estratta
  2. La cartella estratta non viene eliminata. Se esiste, vcpkg_extract_source_archive non esegue alcuna operazione.

<short-hash> identifica in modo univoco un determinato set di contenuti di file di archiviazione e patch. Eventuali modifiche al contenuto della directory di lavoro dopo la chiamata di questa funzione devono essere applicate in modo incondizionato per evitare comportamenti imprevisti in modalità modificabile.

Esempi

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

Osservazioni:

Sintassi deprecata

Questo comando supporta anche un overload deprecato:

vcpkg_extract_source_archive(<archive> [<working_directory>])

L'overload deprecato estrae <archive> in ${working_directory}/<archive-filename>.extracted se la destinazione non esiste. Questo comportamento non corretto consente patch e altre modifiche di perdere tra compilazioni diverse, causando errori difficili da sottoporre a debug.

Tutti gli usi dell'overload deprecato devono essere sostituiti con la sintassi descritta in Utilizzo precedente aggiungendo un parametro esplicito ARCHIVE e sostituendo i riferimenti diretti al percorso estratto con gli usi di <out-var> .

Sostituzione

Questo comando sostituisce vcpkg_extract_source_archive_ex().

Origine

scripts/cmake/vcpkg_extract_source_archive.cmake