vcpkg_extract_source_archive

提取存档。

使用情况

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

参数

<out-var>

要使用包含提取内容的目录设置的变量的名称。

ARCHIVE

要提取的存档的完整路径。

NO_REMOVE_ONE_LEVEL

跳过移除存档的顶级目录。

大多数存档包含一个顶级目录,例如:

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

默认情况下,vcpkg_extract_source_archive 会移除此目录并将所有内容移动到 <out-var> 中返回的目录中。 如果没有顶级目录,则会出现错误。

使用此标志时,将保留顶级目录,没有顶级目录也不会出现错误。

SKIP_PATCH_CHECK

应用修补程序时,无提示并忽略错误。

仅当在以不稳定模式(如 --head)下运行时,才应传递此选项。 如果源已固定,则无法应用修补程序应被视为致命错误。

PATCHES

要应用于提取源的修补程序列表。

移除任何顶级目录后,将按顺序应用修补程序(请参阅 NO_REMOVE_ONE_LEVEL)。 相对路径解读为相对于当前端口目录。

如果应根据目标信息有条件地应用修补程序,则可以构造一个列表并将其展开。

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

提取目录的易记名称。

不得包含路径分隔符(/\\)。

有关更多详细信息,请参阅WORKING_DIRECTORY

BASE_DIRECTORY

提取目录的根子文件夹。

默认为 src。 必须为相对路径。

有关更多详细信息,请参阅WORKING_DIRECTORY

WORKING_DIRECTORY

提取目录的根文件夹。

默认为 ${CURRENT_BUILDTREES_DIR}/<BASE_DIRECTORY>。 必须为绝对路径。

vcpkg_extract_source_archive 将存档提取到 <WORKING_DIRECTORY>/<SOURCE_BASE>-<short-hash>.clean 中。 如果该文件夹存在,则会在提取之前将其删除。 如果未指定 SOURCE_BASEBASE_DIRECTORYWORKING_DIRECTORY,默认为 ${CURRENT_BUILDTREES_DIR}/src/<archive-stem>-<short-hash>.clean

--editable 模式下:

  1. 不会将任何 .clean 后缀添加到提取文件夹
  2. 不会删除提取文件夹。 如果存在,vcpkg_extract_source_archive 不执行任何操作。

<short-hash> 明确标识一组特定的存档和修补文件内容。 调用此函数后对工作目录内容进行的任何修改都应无条件应用,以避免在可编辑模式下出现意外行为。

示例

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

注解

已弃用的语法

此命令还支持已弃用的重载:

vcpkg_extract_source_archive(<archive> [<working_directory>])

如果目标不存在,则已弃用的重载会将 <archive> 提取到 ${working_directory}/<archive-filename>.extracted 中。 这种不正确的行为会在不同的构建之间泄漏修补程序和其他修改,从而导致难以调试的错误。

已弃用重载的所有使用都应替换为上面用法中的语法,方法是添加显式 ARCHIVE 参数并将对提取路径的直接引用替换为使用 <out-var>

替代功能

此命令将取代 vcpkg_extract_source_archive_ex()

Source

scripts/cmake/vcpkg_extract_source_archive.cmake