Uso de tripletas superpuestas
Creación de bibliotecas dinámicas en Linux
Con vcpkg puede compilar bibliotecas para muchas configuraciones listas para usar. Sin embargo, esto no incluye actualmente bibliotecas compartidas en Linux y Mac OS.
Esto no significa que no pueda usar vcpkg para compilar las bibliotecas dinámicas en estas plataformas. Este documento le guiará a través de la creación de sus propios tripletes personalizados con --overlay-triplets
para crear fácilmente bibliotecas dinámicas en Linux.
Paso 1: Crear los archivos triplete personalizados
Para ahorrar tiempo, copie el archivo triplet existente x64-linux.cmake
.
~/git$ mkdir custom-triplets
~/git$ cp vcpkg/triplets/x64-linux.cmake custom-triplets/x64-linux-dynamic.cmake
Y modifique custom-triplets/x64-linux-dynamic.cmake
para que coincida con el contenido siguiente:
# ~/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)
Paso 2: Uso --overlay-triplets
para crear bibliotecas dinámicas
Use la --overlay-triplets
opción para incluir los tripletes en el custom-triplets
directorio .
~/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)
Los tripletes de superposición habilitan los archivos triplete personalizados al usar vcpkg install
, vcpkg update
, vcpkg upgrade
y vcpkg remove
.
Al usar la --overlay-triplets
opción , un mensaje como el siguiente le permite saber que se usa un triplete personalizado:
-- Loading triplet configuration from: /home/custom-triplets/x64-linux-dynamic.cmake
Invalidación de tripletas predeterminadas
Como puede haber observado, los tripletes predeterminados para Windows (x86-windows
e x64-windows
) instalan bibliotecas dinámicas, mientras que se necesita un sufijo (-static
) para las bibliotecas estáticas. Esto es diferente con Linux y Mac OS donde las bibliotecas estáticas se compilan mediante x64-linux
y x64-osx
.
El uso --overlay-triplets
de es posible invalidar los tripletes predeterminados para lograr el mismo comportamiento en Linux:
x64-linux
: compila bibliotecas dinámicas,x64-linux-static
: compila bibliotecas estáticas.
Paso 1: Crear los tripletes de superposición
Con el triplete personalizado creado en el ejemplo anterior, cambie el nombre custom-triplets/x64-linux-dynamic.cmake
a custom-triplets/x64-linux.cmake
. A continuación, copie el triplete predeterminado x64-linux
(que compila bibliotecas estáticas) en la custom-triplets
carpeta y cámbielo a 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
Paso 2: Usar --overlay-triplets
para invalidar los tripletes predeterminados
Use la --overlay-triplets
opción para incluir los tripletes en el custom-triplets
directorio .
~/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)
El triplete predeterminado se enmascara mediante el triplete personalizado:
-- Loading triplet configuration from: /home/victor/git/custom-triplets/x64-linux.cmake