Conan para C++: Guia completo com exemplos práticos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Conan para C++: Guia completo com exemplos práticos

1. O que é e por que usar

Conan é um gerenciador de pacotes descentralizado e de código aberto, projetado para a linguagem C++. Ele resolve um dos problemas mais dolorosos no ecossistema C++: o gerenciamento de dependências. Ao contrário de outras linguagens (Python com pip, JavaScript com npm, Rust com Cargo), o C++ por muito tempo não teve uma ferramenta padrão para baixar, compilar e integrar bibliotecas de terceiros automaticamente. Os desenvolvedores precisavam baixar os códigos-fonte manualmente, configurar caminhos de include, vincular bibliotecas e resolver conflitos de versões de forma trabalhosa. O Conan automatiza todo esse processo.

Conan suporta todos os principais sistemas operacionais (Windows, Linux, macOS) e compiladores (GCC, Clang, MSVC, MinGW). Ele funciona com diferentes sistemas de build: CMake, MSBuild, Makefiles, SCons, Bazel e outros. Os pacotes no Conan podem ser distribuídos tanto como código-fonte (o Conan os compila para sua plataforma) quanto como binários prontos. Isso economiza horas de trabalho, especialmente em projetos grandes com dezenas de dependências.

Uma característica fundamental do Conan é seu modelo de perfis. Você pode definir um perfil para cada plataforma/compilador (por exemplo, "clang-14-release-x86_64" ou "msvc-2022-debug-x86"). O Conan automaticamente seleciona ou compila pacotes compatíveis com seu perfil. Isso o torna uma ferramenta indispensável para desenvolvimento multiplataforma e pipelines de CI/CD.

2. Instalação

Conan é escrito em Python e instalado via pip. Recomenda-se instalá-lo em um ambiente virtual (venv) para evitar conflitos com pacotes Python do sistema.

# Instalação via pip (recomendado em ambiente virtual)
python -m pip install conan

# Verificar instalação
conan --version

# Atualizar para a versão mais recente
python -m pip install --upgrade conan

Após a instalação, é recomendável configurar o repositório remoto (remote) padrão — o ConanCenter. Ele já vem adicionado por padrão, mas você pode verificar com o comando:

conan remote list

Se o ConanCenter não estiver presente, adicione-o:

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

3. Início rápido — exemplo mínimo funcional

Vamos criar um projeto simples que usa as bibliotecas fmtlib (formatação de strings) e zlib (compressão de dados).

Passo 1: Estrutura do projeto

mkdir my_conan_project
cd my_conan_project
mkdir src

Passo 2: Arquivo conanfile.txt

[requires]
fmt/10.2.1
zlib/1.3.1

[generators]
CMakeDeps
CMakeToolchain

[layout]
cmake_layout

Passo 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)

Passo 4: src/main.cpp

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

int main() {
    // Usando fmt
    fmt::print("Olá do Conan! Versão: {}\n", FMT_VERSION);

    // Usando zlib
    std::cout << "Versão do zlib: " << zlibVersion() << std::endl;

    // Exemplo simples de compressão
    const char* data = "Olá, Conan! Esta string 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("Compressão bem-sucedida! Original: {} bytes -> Comprimido: {} bytes\n", source_len, dest_len);
    }

    delete[] compressed;
    return 0;
}

Recommendations