Usando trigêmeos sobrepostos

Construindo bibliotecas dinâmicas no Linux

Usando vcpkg você pode criar bibliotecas para muitas configurações prontas para uso. No entanto, isso não inclui atualmente bibliotecas compartilhadas no Linux e no Mac OS.

Isso não significa que você não pode usar vcpkg para construir suas bibliotecas dinâmicas nessas plataformas! Este documento irá guiá-lo através da criação de seus próprios trigêmeos personalizados com --overlay-triplets para construir facilmente bibliotecas dinâmicas no Linux.

Etapa 1: Criar os arquivos triplet personalizados

Para economizar tempo, copie o arquivo triplete existente x64-linux.cmake .

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

E modifique custom-triplets/x64-linux-dynamic.cmake para corresponder ao conteúdo abaixo:

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

Etapa 2: Usar --overlay-triplets para criar bibliotecas dinâmicas

Use a --overlay-triplets opção para incluir os trigêmeos custom-triplets no diretório.

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

A sobreposição de trigêmeos habilita seus arquivos tripletes personalizados ao usar vcpkg install, vcpkg update, vcpkg upgradee vcpkg remove.

Ao usar a opção, uma mensagem como a --overlay-triplets seguinte informa que um triplete personalizado está sendo usado:

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

Substituindo trigêmeos padrão

Como você deve ter notado, os trigêmeos padrão para Windows ( e x64-windows) instalam bibliotecas dinâmicas, enquanto um sufixo (x86-windows-static) é necessário para bibliotecas estáticas. Isso é diferente com Linux e Mac OS, onde bibliotecas estáticas são construídas por x64-linux e x64-osx.

Usando --overlay-triplets é possível substituir os trigêmeos padrão para realizar o mesmo comportamento no Linux:

  • x64-linux: Cria bibliotecas dinâmicas,
  • x64-linux-static: Cria bibliotecas estáticas.

Etapa 1: Criar os trigêmeos sobrepostos

Usando o triplet personalizado criado no exemplo anterior, renomeie custom-triplets/x64-linux-dynamic.cmake para custom-triplets/x64-linux.cmake. Em seguida, copie o triplet padrão x64-linux (que cria bibliotecas estáticas) em sua custom-triplets pasta e renomeie-o para 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

Etapa 2: Usar --overlay-triplets para substituir trigêmeos padrão

Use a --overlay-triplets opção para incluir os trigêmeos custom-triplets no diretório.

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

O triplete padrão é mascarado pelo seu triplete personalizado:

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