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。 如果資料夾存在,則會在擷取之前將其刪除。 若未指定 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()取代 。

來源

scripts/cmake/vcpkg_extract_source_archive.cmake