Verwenden von Überlagerungsdreibchen
Erstellen dynamischer Bibliotheken unter Linux
Mithilfe von vcpkg können Sie Bibliotheken für viele Konfigurationen sofort erstellen. Dies umfasst jedoch derzeit keine freigegebenen Bibliotheken unter Linux und Mac OS.
Dies bedeutet nicht, dass Sie vcpkg nicht verwenden können, um Ihre dynamischen Bibliotheken auf diesen Plattformen zu erstellen! Dieses Dokument führt Sie durch das Erstellen eigener benutzerdefinierter Triplets, mit --overlay-triplets
dem sie dynamische Bibliotheken auf Linux problemlos erstellen können.
Schritt 1: Erstellen der benutzerdefinierten Tripletdateien
Um Zeit zu sparen, kopieren Sie die vorhandene x64-linux.cmake
Tripletdatei.
~/git$ mkdir custom-triplets
~/git$ cp vcpkg/triplets/x64-linux.cmake custom-triplets/x64-linux-dynamic.cmake
Und ändern Sie custom-triplets/x64-linux-dynamic.cmake
sie so, dass sie mit den folgenden Inhalten übereinstimmt:
# ~/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)
Schritt 2: Verwenden --overlay-triplets
zum Erstellen dynamischer Bibliotheken
Verwenden Sie die --overlay-triplets
Option, um die Triplets in das custom-triplets
Verzeichnis einzuschließen.
~/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)
Überlagerungs-Triplets ermöglichen Ihre benutzerdefinierten Tripletdateien bei Verwendung vcpkg install
, vcpkg update
, , vcpkg upgrade
und vcpkg remove
.
Wenn Sie die --overlay-triplets
Option verwenden, teilt Ihnen eine Meldung wie die folgende mit, dass ein benutzerdefiniertes Triplet verwendet wird:
-- Loading triplet configuration from: /home/custom-triplets/x64-linux-dynamic.cmake
Überschreiben von Standard-Triplets
Wie Sie vielleicht bemerkt haben, installieren die Standard-Triplets für Windows (x86-windows
und x64-windows
) dynamische Bibliotheken, während ein Suffix (-static
) für statische Bibliotheken erforderlich ist. Dies unterscheidet sich von Linux und Mac OS, in denen statische Bibliotheken von x64-linux
und x64-osx
.
Die Verwendung --overlay-triplets
ist es möglich, die Standard-Triplets außer Kraft zu setzen, um dasselbe Verhalten unter Linux zu erreichen:
x64-linux
: Erstellt dynamische Bibliotheken,x64-linux-static
: Erstellt statische Bibliotheken.
Schritt 1: Erstellen der Overlay-Triplets
Verwenden des benutzerdefinierten Triplets, das im vorherigen Beispiel erstellt wurde, benennen Sie in custom-triplets/x64-linux-dynamic.cmake
custom-triplets/x64-linux.cmake
. Kopieren Sie dann das Standard-Triplet x64-linux
(das statische Bibliotheken erstellt) in Ihren custom-triplets
Ordner, und benennen Sie es x64-linux-static.cmake
um.
~/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
Schritt 2: Verwenden --overlay-triplets
zum Überschreiben von Standarddreibchen
Verwenden Sie die --overlay-triplets
Option, um die Triplets in das custom-triplets
Verzeichnis einzuschließen.
~/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)
Das Standardmäßige Triplet wird von Ihrem benutzerdefinierten Triplet maskiert:
-- Loading triplet configuration from: /home/victor/git/custom-triplets/x64-linux.cmake