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;
} Também na biblioteca
ZXing para Kotlin: guia completo com exemplos práticos
Filas de Tarefas em Java: Visão Geral e Implementação com java.util.concurrent
Trabalhando com Excel em Go (Golang): bibliotecas Excelize, xlsx, tealeg
Bibliotecas WebSocket Rust: Tokio-tungstenite e async-tungstenite para tempo real