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++!
También en la biblioteca
Geolocalización y mapas en C++: revisión de bibliotecas y herramientas
Trabajo con Apache Kafka en C# (.NET): biblioteca Confluent.Kafka
Disruptor Java: guía completa con ejemplos prácticos
Diesel para Rust: guía completa con ejemplos
ORM para JavaScript (Node.js): comparación de Sequelize, TypeORM, Prisma