Conan C++: Komplette Anleitung mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Conan für C++: Komplette Anleitung mit Beispielen

1. Was ist Conan und warum braucht man es?

Conan ist ein dezentraler Open-Source-Paketmanager für die Programmiersprache C++. Er löst eines der schmerzhaftesten Probleme im C++-Ökosystem: die Verwaltung von Abhängigkeiten. Im Gegensatz zu anderen Sprachen (Python mit pip, JavaScript mit npm, Rust mit Cargo) hatte C++ lange Zeit kein Standardwerkzeug zum automatischen Herunterladen, Bauen und Integrieren von Drittanbieter-Bibliotheken. Entwickler mussten Quellcode manuell herunterladen, Include-Pfade konfigurieren, Bibliotheken linken und sich mühsam mit Versionskonflikten herumschlagen. Conan automatisiert diesen gesamten Prozess.

Conan unterstützt alle gängigen Betriebssysteme (Windows, Linux, macOS) und Compiler (GCC, Clang, MSVC, MinGW). Es kann mit verschiedenen Build-Systemen arbeiten: CMake, MSBuild, Makefiles, SCons, Bazel und anderen. Pakete in Conan können sowohl als Quellcode (dann baut Conan sie für Ihre Plattform) als auch als vorgefertigte Binärdateien verteilt werden. Das spart Stunden an Zeit, besonders in großen Projekten mit Dutzenden von Abhängigkeiten.

Die wichtigste Funktion von Conan ist das Profil-Modell. Sie können ein Profil für jede Plattform/jeden Compiler definieren (z.B. "clang-14-release-x86_64" oder "msvc-2022-debug-x86"). Conan wählt automatisch Pakete aus oder baut sie, die zu Ihrem Profil passen. Das macht es zu einem unverzichtbaren Werkzeug für plattformübergreifende Entwicklung und CI/CD-Pipelines.

2. Installation

Conan ist in Python geschrieben und wird über pip installiert. Es wird empfohlen, es in einer virtuellen Umgebung (venv) zu installieren, um Konflikte mit System-Python-Paketen zu vermeiden.

# Installation über pip (empfohlen in einer virtuellen Umgebung)
python -m pip install conan

# Installation überprüfen
conan --version

# Update auf die neueste Version
python -m pip install --upgrade conan

Nach der Installation sollten Sie sofort das Standard-Remote-Repository (Remote) einrichten – ConanCenter. Es ist standardmäßig bereits hinzugefügt, aber Sie können dies mit folgendem Befehl überprüfen:

conan remote list

Wenn ConanCenter fehlt, fügen Sie es hinzu:

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

3. Schnellstart – Minimales funktionierendes Beispiel

Erstellen wir ein einfaches Projekt, das die Bibliotheken fmtlib (String-Formatierung) und zlib (Datenkompression) verwendet.

Schritt 1: Projektstruktur

mkdir my_conan_project
cd my_conan_project
mkdir src

Schritt 2: Datei conanfile.txt

[requires]
fmt/10.2.1
zlib/1.3.1

[generators]
CMakeDeps
CMakeToolchain

[layout]
cmake_layout

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

Schritt 4: src/main.cpp

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

int main() {
    // Verwendung von fmt
    fmt::print("Hallo von Conan! Version: {}\n", FMT_VERSION);

    // Verwendung von zlib
    std::cout << "zlib-Version: " << zlibVersion() << std::endl;

    // Einfaches Kompressionsbeispiel
    const char* data = "Hallo, Conan! Dieser String wird komprimiert.";
    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("Komprimierung erfolgreich! Original: {} Bytes -> Komprimiert: {} Bytes\n", source_len, dest_len);
    } else {
        fmt::print("Fehler bei der Komprimierung: {}\n", ret);
    }

    delete[] compressed;
    return 0;
}

Schritt 5: Projekt bauen und ausführen

# Abhängigkeiten installieren
conan install . --build=missing

# Build-Verzeichnis konfigurieren und bauen
cmake --preset conan-default
cmake --build --preset conan-release

# Ausführen
./build/Release/my_app

Ausgabe:

Hallo von Conan! Version: 100201
zlib-Version: 1.3.1
Komprimierung erfolgreich! Original: 53 Bytes -> Komprimiert: 39 Bytes

4. Wichtige Conan-Methoden und -Befehle

4.1 Pakete suchen

# Nach einem Paket suchen
conan search "fmt" --remote=conancenter

# Alle verfügbaren Versionen eines Pakets anzeigen
conan search fmt/* --remote=conancenter

4.2 Paketinformationen anzeigen

# Details zu einem Paket anzeigen
conan inspect fmt/10.2.1

# Abhängigkeiten eines Pakets anzeigen
conan info fmt/10.2.1

4.3 Pakete erstellen und veröffentlichen

# Ein Paket aus dem Quellcode erstellen
conan create . --version=1.0.0

# Ein Paket in ein Remote-Repository hochladen
conan upload mypackage/1.0.0 --remote=myremote

4.4 Profile verwalten

# Vorhandene Profile anzeigen
conan profile list

# Ein neues Profil erstellen
conan profile detect --name=myprofile

# Ein Profil bearbeiten
conan profile update settings.compiler=gcc myprofile

5. Fortgeschrittene Techniken

5.1 Mit conanfile.py arbeiten

Für komplexere Projekte verwenden Sie eine conanfile.py anstelle einer conanfile.txt. Dies gibt Ihnen mehr Kontrolle über den Build-Prozess:

from conan import ConanFile

class MyProjectConan(ConanFile):
    name = "my_project"
    version = "1.0.0"
    settings = "os", "compiler", "build_type", "arch"
    requires = "fmt/10.2.1", "zlib/1.3.1"
    generators = "CMakeDeps", "CMakeToolchain"

    def layout(self):
        cmake_layout(self)

    def package_info(self):
        self.cpp_info.libs = ["my_lib"]

5.2 Optionen und Konfigurationen

Sie können Paketoptionen in Ihrer conanfile.txt oder conanfile.py festlegen:

[requires]
poco/1.12.4

[options]
poco:shared=True
poco:enable_zip=False

5.3 Mit mehreren Remotes arbeiten

# Ein weiteres Remote-Repository hinzufügen
conan remote add mycompany https://conan.mycompany.com

# Pakete von einem bestimmten Remote installieren
conan install . --remote=mycompany

6. Fazit

Conan ist der führende Paketmanager für C++ und ein unverzichtbares Werkzeug für moderne C++-Entwicklung. Es automatisiert die Verwaltung von Abhängigkeiten, spart Zeit und reduziert Fehler. Mit seiner Unterstützung für verschiedene Plattformen, Compiler und Build-Systeme ist es ideal für sowohl kleine als auch große Projekte. Beginnen Sie noch heute mit Conan und erleben Sie, wie einfach C++-Abhängigkeitsmanagement sein kann!

Empfehlungen