Udostępnij za pośrednictwem


Korzystanie z trójkropków nakładki

Tworzenie bibliotek dynamicznych w systemie Linux

Za pomocą narzędzia vcpkg można tworzyć biblioteki dla wielu konfiguracji. Nie obejmuje to jednak obecnie bibliotek udostępnionych w systemach Linux i Mac OS.

Nie oznacza to, że nie można używać narzędzia vcpkg do tworzenia bibliotek dynamicznych na tych platformach! Ten dokument przeprowadzi Cię przez proces tworzenia własnych niestandardowych trypletów, --overlay-triplets dzięki którym można łatwo tworzyć biblioteki dynamiczne w systemie Linux.

Krok 1. Tworzenie niestandardowych plików potrójnych

Aby zaoszczędzić czas, skopiuj istniejący x64-linux.cmake plik potrójny.

~/git$ mkdir custom-triplets
~/git$ cp vcpkg/triplets/x64-linux.cmake custom-triplets/x64-linux-dynamic.cmake

I zmodyfikuj custom-triplets/x64-linux-dynamic.cmake , aby dopasować zawartość poniżej:

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

Krok 2. Tworzenie bibliotek dynamicznych przy użyciu polecenia --overlay-triplets

--overlay-triplets Użyj opcji , aby uwzględnić trojaczki w custom-triplets katalogu.

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

Potrójne nakładki umożliwiają niestandardowe potrójne pliki w przypadku używania vcpkg installplików , , vcpkg updatevcpkg upgradei vcpkg remove.

W przypadku korzystania z opcji komunikat podobny do poniższego --overlay-triplets informuje, że jest używana niestandardowa trójka:

-- Loading triplet configuration from: /home/custom-triplets/x64-linux-dynamic.cmake

Zastępowanie domyślnych trójkropków

Jak można było zauważyć, domyślne trojaczki dla systemu Windows (x86-windows i x64-windows) instalują biblioteki dynamiczne, podczas gdy sufiks (-static) jest wymagany dla bibliotek statycznych. Różni się to w przypadku systemów Linux i Mac OS, w których biblioteki statyczne są kompilowane przy użyciu x64-linux systemów i x64-osx.

Za pomocą --overlay-triplets polecenia można zastąpić domyślne trójki w celu osiągnięcia tego samego zachowania w systemie Linux:

  • x64-linux: tworzy biblioteki dynamiczne,
  • x64-linux-static: tworzy biblioteki statyczne.

Krok 1. Tworzenie trójkropków nakładki

Za pomocą niestandardowej trójki utworzonej w poprzednim przykładzie zmień nazwę custom-triplets/x64-linux-dynamic.cmake na custom-triplets/x64-linux.cmake. Następnie skopiuj domyślny x64-linux triplet (który kompiluje biblioteki statyczne) w custom-triplets folderze i zmień jego nazwę na x64-linux-static.cmake.

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

Krok 2. Użyj polecenia --overlay-triplets , aby zastąpić domyślne trójki

--overlay-triplets Użyj opcji , aby uwzględnić trojaczki w custom-triplets katalogu.

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

Domyślny triplet jest maskowany przez niestandardowy triplet:

-- Loading triplet configuration from: /home/victor/git/custom-triplets/x64-linux.cmake