Compartilhar via


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