Freigeben über


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 upgradeund 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.cmakecustom-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.cmakeum.

~/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