Использование тройных наложений
Создание динамических библиотек в 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-linux
и x64-osx
.
Использование --overlay-triplets
можно переопределить триплеты по умолчанию для выполнения того же поведения в Linux:
x64-linux
: создает динамические библиотеки,x64-linux-static
: создает статические библиотеки.
Шаг 1. Создание тройных наложений
Используя настраиваемый триплет, созданный в предыдущем примере, переименуйте в custom-triplets/x64-linux-dynamic.cmake
custom-triplets/x64-linux.cmake
. Затем скопируйте триплет по умолчанию x64-linux
(который создает статические библиотеки) в custom-triplets
папке и переименуйте его 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
Шаг 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