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 upgrade
e 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