Conan C++ : guide complet avec exemples pratiques
1. Qu'est-ce que Conan et pourquoi l'utiliser ?
Conan est un gestionnaire de paquets décentralisé et open source, conçu spécifiquement pour le langage C++. Il résout l'un des problèmes les plus épineux de l'écosystème C++ : la gestion des dépendances. Contrairement à d'autres langages (Python avec pip, JavaScript avec npm, Rust avec Cargo), le C++ a longtemps manqué d'un outil standard pour télécharger, compiler et intégrer automatiquement des bibliothèques tierces. Les développeurs devaient télécharger manuellement les sources, configurer les chemins d'inclusion, lier les bibliothèques et gérer péniblement les conflits de versions. Conan automatise entièrement ce processus.
Conan prend en charge tous les principaux systèmes d'exploitation (Windows, Linux, macOS) et compilateurs (GCC, Clang, MSVC, MinGW). Il s'intègre avec différents systèmes de build : CMake, MSBuild, Makefiles, SCons, Bazel, etc. Les paquets Conan peuvent être distribués sous forme de code source (Conan les compile alors pour votre plateforme) ou sous forme de binaires pré-compilés. Cela vous fait gagner des heures, en particulier sur les grands projets avec des dizaines de dépendances.
La fonctionnalité clé de Conan est son modèle de profils. Vous pouvez définir un profil pour chaque plateforme/compilateur (par exemple, "clang-14-release-x86_64" ou "msvc-2022-debug-x86"). Conan sélectionne ou compile automatiquement les paquets compatibles avec votre profil. Cela en fait un outil indispensable pour le développement cross-plateforme et les pipelines CI/CD.
2. Installation
Conan est écrit en Python et s'installe via pip. Il est recommandé de l'installer dans un environnement virtuel (venv) pour éviter les conflits avec les paquets système Python.
# Installation via pip (recommandé dans un environnement virtuel)
python -m pip install conan
# Vérification de l'installation
conan --version
# Mise à jour vers la dernière version
python -m pip install --upgrade conan
Après l'installation, il est conseillé de configurer le dépôt distant (remote) par défaut — ConanCenter. Il est déjà ajouté par défaut, mais vous pouvez le vérifier avec cette commande :
conan remote list
Si ConanCenter est absent, ajoutez-le :
conan remote add conancenter https://center.conan.io
3. Démarrage rapide — un exemple fonctionnel minimal
Créons un projet simple qui utilise les bibliothèques fmtlib (formatage de chaînes) et zlib (compression de données).
Étape 1 : Structure du projet
mkdir my_conan_project
cd my_conan_project
mkdir src
Étape 2 : Fichier conanfile.txt
[requires]
fmt/10.2.1
zlib/1.3.1
[generators]
CMakeDeps
CMakeToolchain
[layout]
cmake_layout
Étape 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)
Étape 4 : src/main.cpp
#include <fmt/core.h>
#include <zlib.h>
#include <iostream>
int main() {
// Utilisation de fmt
fmt::print("Bonjour depuis Conan ! Version : {}\n", FMT_VERSION);
// Utilisation de zlib
std::cout << "Version de zlib : " << zlibVersion() << std::endl;
// Exemple simple de compression
const char* data = "Bonjour, Conan ! Cette chaîne va être compressée.";
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("Compression réussie ! Original : {} octets -> Comp Aussi dans la bibliothèque
Configuration d'applications Swift : la bibliothèque SwiftyConfig
tsyringe pour TypeScript : guide complet avec exemples
Frameworks CLI pour Rust : aperçu des meilleurs outils pour créer des utilitaires en ligne de commande
WebSocket en C++ : bibliothèques et applications pratiques
MailKit C# (.NET) : guide complet avec exemples