Использование тройных наложений

Создание динамических библиотек в 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 updatevcpkg 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.cmakecustom-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