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_BASE
、 BASE_DIRECTORY
或 WORKING_DIRECTORY
, 則預設為 ${CURRENT_BUILDTREES_DIR}/src/<archive-stem>-<short-hash>.clean
。
在模式中 --editable
:
- 未
.clean
將後綴新增至解壓縮的資料夾 - 不會刪除擷取的資料夾。 如果存在,
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()
取代 。