Compartilhar via


vcpkg_extract_source_archive

Extraia um arquivo.

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>

Nome da variável a ser definida com o diretório que contém o conteúdo extraído.

ARCHIVE

Caminho completo para o arquivo a ser extraído.

NO_REMOVE_ONE_LEVEL

Ignore a remoção do diretório de nível superior do arquivo.

A maioria dos arquivos contém um único diretório de nível superior, como:

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

Por padrão, vcpkg_extract_source_archive remove esse diretório e move todo o conteúdo para o diretório retornado no <out-var>. Se não houver nenhum diretório de nível superior, trata-se de um erro.

Com esse sinalizador, o diretório de nível superior será preservado e não é um erro não ter um.

SKIP_PATCH_CHECK

Silencie e ignore erros ao aplicar patches.

Essa opção só deve ser passada ao operar em um modo instável como --heado . Se as fontes estiverem fixadas, deixar de aplicar um patch deve ser considerado um erro fatal.

PATCHES

Lista de patches a serem aplicados à fonte extraída.

Os patches serão aplicados em ordem, depois que todos os diretórios de nível superior forem removidos (consulte NO_REMOVE_ONE_LEVEL). Os caminhos relativos são interpretados em relação ao diretório de porta atual.

Se um patch deve ser aplicado condicionalmente com base nas informações de destino, você pode construir uma lista e escaloná-la.

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

Nome bonito para o diretório extraído.

Não deve conter separadores de caminho (/ ou \\).

Confira WORKING_DIRECTORY para saber mais.

BASE_DIRECTORY

Subpasta raiz para o diretório extraído.

Assume o padrão de src. Deve ser um caminho relativo.

Confira WORKING_DIRECTORY para saber mais.

WORKING_DIRECTORY

Pasta raiz para o diretório extraído.

Assume o padrão de ${CURRENT_BUILDTREES_DIR}/<BASE_DIRECTORY>. Deve ser um caminho absoluto.

vcpkg_extract_source_archive extrai o arquivo em <WORKING_DIRECTORY>/<SOURCE_BASE>-<short-hash>.clean. Se a pasta existir, ela será excluída antes da extração. Sem especificar SOURCE_BASE, ou WORKING_DIRECTORY, BASE_DIRECTORYisso será padrão para ${CURRENT_BUILDTREES_DIR}/src/<archive-stem>-<short-hash>.clean.

Em --editable modo:

  1. Nenhum .clean sufixo é adicionado à pasta extraída
  2. A pasta extraída não é excluída. Se existe, vcpkg_extract_source_archive não faz nada.

<short-hash> identifica inequivocamente um conjunto específico de conteúdo de arquivo morto e de patch. Quaisquer modificações no conteúdo do diretório de trabalho depois de chamar essa função devem ser aplicadas incondicionalmente para evitar um comportamento inesperado no modo editável.

Exemplos

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

Comentários

Sintaxe preterida

Este comando também suporta uma sobrecarga preterida:

vcpkg_extract_source_archive(<archive> [<working_directory>])

A sobrecarga preterida será extraída <archive> se ${working_directory}/<archive-filename>.extracted o destino não existir. Esse comportamento incorreto permite que patches e outras modificações vazem entre compilações diferentes, resultando em erros difíceis de depurar.

Todos os usos da sobrecarga preterida devem ser substituídos pela sintaxe em Uso acima, adicionando um parâmetro explícito ARCHIVE e substituindo referências diretas ao caminho extraído por usos do <out-var> .

Substituição

Este comando substitui vcpkg_extract_source_archive_ex()o .

Origem

scripts/cmake/vcpkg_extract_source_archive.cmake