Compartir a través de


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 upgradey 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