使用重迭三重奏
在 Linux 上建置動態連結程式庫
您可以使用 vcpkg 來建置程式庫,以供現用的許多組態使用。 不過,這目前不包含 Linux 和 Mac OS 上的共用程式庫。
這並不表示您無法使用 vcpkg 在這些平臺上建置您的動態連結程式庫! 本檔將引導您建立自己的自訂三胞胎, --overlay-triplets
以輕鬆地在 Linux 上建置動態連結程式庫。
步驟 1:建立自訂三重檔案
若要節省時間,請複製現有的 x64-linux.cmake
三重檔案。
~/git$ mkdir custom-triplets
~/git$ cp vcpkg/triplets/x64-linux.cmake custom-triplets/x64-linux-dynamic.cmake
custom-triplets/x64-linux-dynamic.cmake
修改 以符合下列內容:
# ~/git/custom-triplets/x64-linux-dynamic.cmake
set(VCPKG_TARGET_ARCHITECTURE x64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE dynamic) # This changed from static to dynamic
set(VCPKG_CMAKE_SYSTEM_NAME Linux)
步驟 2:用來 --overlay-triplets
建置動態連結程式庫
--overlay-triplets
使用 選項,將三胞胎 custom-triplets
包含在目錄中。
~/git$ vcpkg/vcpkg install sqlite3:x64-linux-dynamic --overlay-triplets=custom-triplets
The following packages will be built and installed:
sqlite3[core]:x64-linux-dynamic
Starting package 1/1: sqlite3:x64-linux-dynamic
Building package sqlite3[core]:x64-linux-dynamic...
-- Loading triplet configuration from: /home/victor/git/custom-triplets/x64-linux-dynamic.cmake
-- Downloading https://sqlite.org/2019/sqlite-amalgamation-3280000.zip...
-- Extracting source /home/victor/git/vcpkg/downloads/sqlite-amalgamation-3280000.zip
-- Applying patch fix-arm-uwp.patch
-- Using source at /home/victor/git/vcpkg/buildtrees/sqlite3/src/3280000-6a3ff7ce92
-- Configuring x64-linux-dynamic-dbg
-- Configuring x64-linux-dynamic-rel
-- Building x64-linux-dynamic-dbg
-- Building x64-linux-dynamic-rel
-- Performing post-build validation
-- Performing post-build validation done
Building package sqlite3[core]:x64-linux-dynamic... done
Installing package sqlite3[core]:x64-linux-dynamic...
Installing package sqlite3[core]:x64-linux-dynamic... done
Elapsed time for package sqlite3:x64-linux-dynamic: 44.82 s
Total elapsed time: 44.82 s
The package sqlite3:x64-linux-dynamic provides CMake targets:
find_package(unofficial-sqlite3 CONFIG REQUIRED)
target_link_libraries(main PRIVATE unofficial::sqlite3::sqlite3)
重迭三胞胎可在使用 vcpkg install
、 vcpkg update
、 vcpkg upgrade
和 vcpkg remove
時啟用自訂三重檔案。
使用 --overlay-triplets
選項時,如下所示的訊息可讓您知道正在使用自訂三元組:
-- Loading triplet configuration from: /home/custom-triplets/x64-linux-dynamic.cmake
覆寫預設三胞胎
如您所注意到,Windows 的預設三胞胎 ( x86-windows
和 x64-windows
) 會安裝動態連結程式庫,而靜態程式庫則需要尾碼 ( -static
)。 這與 Linux 和 Mac OS 不同,其中靜態程式庫是由 和 x64-osx
建置。 x64-linux
您可以使用 --overlay-triplets
覆寫預設三元組,以在 Linux 上完成相同的行為:
x64-linux
:建置動態連結程式庫,x64-linux-static
:建置靜態程式庫。
步驟 1:建立重迭三胞胎
使用在上一個範例中建立的自訂三元組,將 重新命名 custom-triplets/x64-linux-dynamic.cmake
為 custom-triplets/x64-linux.cmake
。 然後,複製您資料夾中的預設 x64-linux
三重專案 (這會建置靜態程式庫),並將它重新命名為 x64-linux-static.cmake
。 custom-triplets
~/git$ mv custom-triplets/x64-linux-dynamic.cmake custom-triplets/x64-linux.cmake
~/git$ cp vcpkg/triplets/x64-linux.cmake custom-triplets/x64-linux-static.cmake
步驟 2:用來 --overlay-triplets
覆寫預設三胞胎
--overlay-triplets
使用 選項,將三胞胎 custom-triplets
包含在目錄中。
~/git$ vcpkg/vcpkg install sqlite3:x64-linux --overlay-triplets=custom-triplets
The following packages will be built and installed:
sqlite3[core]:x64-linux
Starting package 1/1: sqlite3:x64-linux
Building package sqlite3[core]:x64-linux...
-- Loading triplet configuration from: /home/victor/git/custom-triplets/x64-linux.cmake
-- Downloading https://sqlite.org/2019/sqlite-amalgamation-3280000.zip...
-- Extracting source /home/victor/git/vcpkg/downloads/sqlite-amalgamation-3280000.zip
-- Applying patch fix-arm-uwp.patch
-- Using source at /home/victor/git/vcpkg/buildtrees/sqlite3/src/3280000-6a3ff7ce92
-- Configuring x64-linux-dbg
-- Configuring x64-linux-rel
-- Building x64-linux-dbg
-- Building x64-linux-rel
-- Performing post-build validation
-- Performing post-build validation done
Building package sqlite3[core]:x64-linux... done
Installing package sqlite3[core]:x64-linux...
Installing package sqlite3[core]:x64-linux... done
Elapsed time for package sqlite3:x64-linux: 44.82 s
Total elapsed time: 44.82 s
The package sqlite3:x64-linux provides CMake targets:
find_package(unofficial-sqlite3 CONFIG REQUIRED)
target_link_libraries(main PRIVATE unofficial::sqlite3::sqlite3)
預設三元組會由您的自訂三元組遮罩:
-- Loading triplet configuration from: /home/victor/git/custom-triplets/x64-linux.cmake