다음을 통해 공유


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>

추출된 내용이 포함된 디렉터리로 설정할 변수의 이름입니다.

보관

추출할 보관 파일의 전체 경로입니다.

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불안정한 모드에서 작동하는 경우에만 전달되어야 합니다. 원본이 고정된 경우 패치를 적용하지 못하는 경우 심각한 오류로 간주되어야 합니다.

패치

추출된 원본에 적용할 패치 목록입니다.

최상위 디렉터리를 제거한 후 패치가 순서대로 적용됩니다(참조 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파일을 추출합니다. 폴더가 있으면 추출하기 전에 삭제됩니다. 또는 를 BASE_DIRECTORYWORKING_DIRECTORY지정SOURCE_BASE하지 않으면 기본값은 .로 설정${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()

원본

scripts/cmake/vcpkg_extract_source_archive.cmake