Guía completa de Conan para C++ con ejemplos prácticos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Conan para C++: guía completa con ejemplos prácticos

1. ¿Qué es Conan y por qué usarlo?

Conan es un gestor de paquetes descentralizado y de código abierto diseñado para el lenguaje C++. Resuelve uno de los problemas más comunes en el ecosistema de C++: la gestión de dependencias. A diferencia de otros lenguajes (Python con pip, JavaScript con npm, Rust con Cargo), C++ careció durante mucho tiempo de una herramienta estándar para descargar, compilar e integrar bibliotecas de terceros de forma automática. Los desarrolladores tenían que descargar manualmente los fuentes, configurar rutas de inclusión, enlazar bibliotecas y lidiar con conflictos de versiones. Conan automatiza todo este proceso.

Conan es compatible con los principales sistemas operativos (Windows, Linux, macOS) y compiladores (GCC, Clang, MSVC, MinGW). Funciona con diferentes sistemas de compilación: CMake, MSBuild, Makefiles, SCons, Bazel y otros. Los paquetes en Conan pueden distribuirse tanto en código fuente (Conan los compilará para tu plataforma) como en archivos binarios precompilados. Esto ahorra horas de trabajo, especialmente en proyectos grandes con decenas de dependencias.

Una característica clave de Conan es su modelo de perfiles. Puedes definir un perfil para cada plataforma/compilador (por ejemplo, "clang-14-release-x86_64" o "msvc-2022-debug-x86"). Conan seleccionará o compilará automáticamente los paquetes compatibles con tu perfil. Esto lo convierte en una herramienta indispensable para el desarrollo multiplataforma y los pipelines de CI/CD.

2. Instalación

Conan está escrito en Python y se instala mediante pip. Se recomienda instalarlo en un entorno virtual (venv) para evitar conflictos con los paquetes del sistema.

# Instalación con pip (recomendado en entorno virtual)
python -m pip install conan

# Verificar la instalación
conan --version

# Actualizar a la última versión
python -m pip install --upgrade conan

Después de la instalación, se recomienda configurar el repositorio remoto (remote) por defecto: ConanCenter. Ya viene añadido por defecto, pero puedes verificarlo con el siguiente comando:

conan remote list

Si ConanCenter no aparece, agrégalo manualmente:

conan remote add conancenter https://center.conan.io

3. Inicio rápido — ejemplo mínimo funcional

Vamos a crear un proyecto simple que use las bibliotecas fmtlib (formateo de cadenas) y zlib (compresión de datos).

Paso 1: Estructura del proyecto

mkdir my_conan_project
cd my_conan_project
mkdir src

Paso 2: Archivo conanfile.txt

[requires]
fmt/10.2.1
zlib/1.3.1

[generators]
CMakeDeps
CMakeToolchain

[layout]
cmake_layout

Paso 3: CMakeLists.txt

cmake_minimum_required(VERSION 3.15)
project(MyConanProject CXX)

find_package(fmt REQUIRED)
find_package(ZLIB REQUIRED)

add_executable(my_app src/main.cpp)
target_link_libraries(my_app PRIVATE fmt::fmt ZLIB::ZLIB)

Paso 4: src/main.cpp

#include <fmt/core.h>
#include <zlib.h>
#include <iostream>

int main() {
    // Usamos fmt
    fmt::print("¡Hola desde Conan! Versión: {}\n", FMT_VERSION);

    // Usamos zlib
    std::cout << "Versión de zlib: " << zlibVersion() << std::endl;

    // Ejemplo simple de compresión
    const char* data = "Hola, Conan. Esta cadena será comprimida.";
    uLong source_len = strlen(data) + 1;
    uLong dest_len = compressBound(source_len);
    char* compressed = new char[dest_len];

    int ret = compress(reinterpret_cast(compressed), &dest_len,
                       reinterpret_cast(data), source_len);
    if (ret == Z_OK) {
        fmt::print("¡Compresión exitosa! Original: {} bytes -> Comprimido: {} bytes\n", source_len, dest_len);
    } else {
        fmt::print("Error en la compresión: {}\n", ret);
    }

    delete[] compressed;
    return 0;
}

Paso 5: Compilar y ejecutar

# Instalar dependencias y generar archivos de compilación
conan install . --output-folder=build --build=missing

# Configurar con CMake
cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake
cmake --build .

# Ejecutar
./my_app

Si todo funciona correctamente, verás la versión de fmt, la versión de zlib y un mensaje de compresión exitosa.

4. Métodos principales de Conan

Conan ofrece varios comandos esenciales para gestionar dependencias. Aquí tienes los más importantes:

4.1. conan install

Descarga e instala las dependencias definidas en tu conanfile.txt o conanfile.py. Genera los archivos necesarios para tu sistema de compilación.

conan install . --output-folder=build

4.2. conan search

Busca paquetes disponibles en los repositorios configurados.

conan search "fmt" --remote=conancenter

4.3. conan info

Muestra información detallada sobre un paquete o proyecto.

conan info .

4.4. conan create

Crea un paquete Conan a partir de un conanfile.py y lo publica en la caché local.

conan create .

4.5. conan upload

Sube un paquete a un repositorio remoto.

conan upload "mi-paquete/1.0" --remote=myremote

5. Conclusión

Conan es una herramienta poderosa que simplifica enormemente la gestión de dependencias en C++. Con su modelo de perfiles, soporte multiplataforma y amplia compatibilidad con sistemas de compilación, se ha convertido en el estándar de facto para proyectos C++ modernos. Ya sea que trabajes en un proyecto pequeño o en un sistema empresarial complejo, Conan te ahorrará tiempo y dolores de cabeza.

¿Listo para probarlo? ¡Instálalo hoy y transforma tu flujo de trabajo con C++!

Recommendations