Leer en inglés

Compartir a través de


Tutorial: Instalación y uso de paquetes con CMake

Terminal options

En este tutorial se muestra cómo crear un programa de "Hola mundo" de C++ que usa la fmt biblioteca con CMake y vcpkg. Instalará dependencias, configurará, compilará y ejecutará una aplicación sencilla.

Requisitos previos

  • Un terminal
  • Un compilador de C++
  • CMake
  • Git

Nota

Para los usuarios de Windows, MSVC de Visual Studio (Compilador de Microsoft Visual C++) es el compilador necesario para el desarrollo de C++.

1 - Configurar vcpkg

  1. Clonación del repositorio

    El primer paso es clonar el repositorio vcpkg desde GitHub. El repositorio contiene scripts para adquirir el ejecutable vcpkg y un registro de bibliotecas de código abierto mantenidas mantenidas por la comunidad de vcpkg. Para hacerlo, ejecute lo siguiente:

    git clone https://github.com/microsoft/vcpkg.git
    

    El registro mantenido de vcpkg es un conjunto de más de 2000 bibliotecas de código abierto. Las canalizaciones de integración continua de vcpkg han validado estas bibliotecas para trabajar conjuntamente. Aunque el repositorio vcpkg no contiene el código fuente de estas bibliotecas, contiene recetas y metadatos para compilarlos e instalarlos en el sistema.

  2. Ejecución del script de arranque

    Ahora que ha clonado el repositorio vcpkg, vaya al vcpkg directorio y ejecute el script de arranque:

    cd vcpkg && bootstrap-vcpkg.bat
    
    cd vcpkg; .\bootstrap-vcpkg.bat
    
    cd vcpkg && ./bootstrap-vcpkg.sh
    

    El script de arranque realiza comprobaciones de requisitos previos y descarga el ejecutable vcpkg.

    Eso es todo. vcpkg está configurado y listo para usarse.

2 - Configurar el proyecto

  1. Configure la variable de entorno VCPKG_ROOT.

    export VCPKG_ROOT=/path/to/vcpkg
    export PATH=$VCPKG_ROOT:$PATH
    

    Nota

    Establecer variables de entorno con el export comando solo afecta a la sesión de shell actual. Para que este cambio sea permanente entre sesiones, agregue el export comando al script de perfil del shell (por ejemplo, ~/.bashrc o ~/.zshrc).

    set "VCPKG_ROOT=C:\path\to\vcpkg"
    set PATH=%VCPKG_ROOT%;%PATH%
    

    Nota

    Establecer variables de entorno de esta manera solo afecta a la sesión de terminal actual. Para realizar estos cambios permanentes en todas las sesiones, establézcalos en el panel Variables de entorno del sistema de Windows.

    $env:VCPKG_ROOT = "C:\path\to\vcpkg"
    $env:PATH = "$env:VCPKG_ROOT;$env:PATH"
    

    Nota

    Establecer variables de entorno de esta manera solo afecta a la sesión de terminal actual. Para realizar estos cambios permanentes en todas las sesiones, establézcalos en el panel Variables de entorno del sistema de Windows.

    La configuración VCPKG_ROOT indica a vcpkg dónde se encuentra la instancia de vcpkg. Agregarlo a PATH garantiza que puede ejecutar comandos vcpkg directamente desde el shell.

  2. Cree el directorio del proyecto.

    mkdir helloworld && cd helloworld
    

3- Agregar dependencias y archivos de proyecto

  1. Cree el archivo de manifiesto y agregue la fmt dependencia.

    En primer lugar, cree un archivo de manifiesto (vcpkg.json) en el directorio del proyecto ejecutando el vcpkg new comando desde el helloworld directorio :

    vcpkg new --application
    

    A continuación, agregue la fmt dependencia:

    vcpkg add port fmt
    

    vcpkg.json ahora debería presentar un aspecto similar a este:

    {
        "dependencies": [
            "fmt"
        ]
    }
    

    Este es el archivo de manifiesto. vcpkg lee el archivo de manifiesto para obtener información sobre qué dependencias instalar e integrar con CMake para proporcionar las dependencias necesarias para el proyecto.

    El archivo predeterminado vcpkg-configuration.json presenta restricciones de línea base , especificando las versiones mínimas de las dependencias que debe usar el proyecto. Aunque la modificación de este archivo está fuera del ámbito de este tutorial, desempeña un papel fundamental en la definición de restricciones de versión para las dependencias del proyecto. Por lo tanto, aunque no sea estrictamente necesario para este tutorial, se recomienda agregar vcpkg-configuration.json al control de código fuente para garantizar la coherencia de versiones en distintos entornos de desarrollo.

  2. Cree los archivos del proyecto.

    Cree el CMakeLists.txt archivo con el siguiente contenido:

    cmake_minimum_required(VERSION 3.10)
    
    project(HelloWorld)
    
    find_package(fmt CONFIG REQUIRED)
    
    add_executable(HelloWorld helloworld.cpp)
    
    target_link_libraries(HelloWorld PRIVATE fmt::fmt)
    

    Ahora, vamos a desglosar lo que hace cada línea del CMakeLists.txt archivo:

    • cmake_minimum_required(VERSION 3.10): especifica que la versión mínima de CMake necesaria para compilar el proyecto es 3.10. Si la versión de CMake instalada en el sistema es inferior a esta, se generará un error.
    • project(HelloWorld): establece el nombre del proyecto en "HelloWorld".
    • find_package(fmt CONFIG REQUIRED): busca la fmt biblioteca mediante su archivo de configuración de CMake. La REQUIRED palabra clave garantiza que se genere un error si no se encuentra el paquete.
    • add_executable(HelloWorld helloworld.cpp): agrega un destino ejecutable denominado "HelloWorld", compilado a partir del archivo helloworld.cppde origen .
    • target_link_libraries(HelloWorld PRIVATE fmt::fmt): especifica que el HelloWorld ejecutable debe vincularse con la fmt biblioteca. La PRIVATE palabra clave indica que fmt solo es necesario para compilar HelloWorld y no debe propagarse a otros proyectos dependientes.

    Cree el helloworld.cpp archivo con el siguiente contenido:

    #include <fmt/core.h>
    
    int main()
    {
        fmt::print("Hello World!\n");
        return 0;
    }
    

    En este helloworld.cpp archivo, el <fmt/core.h> encabezado se incluye para usar la fmt biblioteca. A main() continuación, la función llama fmt::print() a para generar el mensaje "Hola mundo!" en la consola.

4- Compilación y ejecución del proyecto

  1. Ejecución de la configuración de CMake

    CMake puede vincular automáticamente las bibliotecas instaladas por vcpkg cuando CMAKE_TOOLCHAIN_FILE se establece para usar la cadena de herramientas personalizada de vcpkg. Esto se puede completar mediante archivos preestablecidos de CMake.

    Cree los siguientes archivos dentro del helloworld directorio:

    CMakePresets.json

    {
      "version": 2,
      "configurePresets": [
        {
          "name": "vcpkg",
          "generator": "Ninja",
          "binaryDir": "${sourceDir}/build",
          "cacheVariables": {
            "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
          }
        }
      ]
    }
    

    CMakeUserPresets.json

    {
        "version": 2,
        "configurePresets": [
          {
            "name": "default",
            "inherits": "vcpkg",
            "environment": {
              "VCPKG_ROOT": "<path to vcpkg>"
            }
          }
        ]
      }
    

    El CMakePresets.json archivo contiene un único valor preestablecido denominado "vcpkg", que establece la CMAKE_TOOLCHAIN_FILE variable . El CMakeUserPresets.json archivo establece la VCPKG_ROOT variable de entorno para que apunte a la ruta de acceso absoluta que contiene la instalación local de vcpkg. Se recomienda no proteger CMakeUserPresets.json los sistemas de control de versiones.

    Por último, configure la compilación mediante CMake:

    cmake --preset=default
    
  2. Compilación del proyecto

    Ejecute:

    cmake --build build
    
  3. Ejecución de la aplicación

    Por último, ejecute el archivo ejecutable para ver la aplicación en acción:

    ./build/HelloWorld
    
    Hello World!
    
    .\build\HelloWorld.exe
    
    Hello World!
    

Pasos siguientes