Cargo-Tutorial

In der Rust-Entwicklung werden fast alle Projekte mit Cargo verwaltet und gebaut, da es einen komfortablen Workflow und leistungsstarke Funktionen bietet, wodurch die Rust-Entwicklung effizienter und zuverlässiger wird.

Was ist Cargo

Cargo ist das offizielle Build-System und der Paketmanager von Rust. Es dient hauptsächlich zwei Zwecken:

Es dient hauptsächlich zwei Zwecken:

  • Projektverwaltung: Cargo wird verwendet, um Rust-Projekte zu erstellen, zu bauen und zu verwalten. Mit Cargo können Sie einfach neue Projekte erstellen, Projektabhängigkeiten verwalten und Vorgänge wie das Bauen, Ausführen und Testen des Projekts durchführen.

  • Paketmanager: Cargo fungiert auch als Paketmanager von Rust. Es ermöglicht Entwicklern, Abhängigkeiten (wie Drittanbieter-Bibliotheken) in ihren Projekten einzubinden und zu verwalten, wodurch Versionsverwaltung und Kompatibilität dieser Abhängigkeiten gewährleistet werden.

Cargos Hauptmerkmale und Funktionen:

  • Abhängigkeitsverwaltung: Cargo verwendet dieCargo.tomlDatei zur Verwaltung von Projektabhängigkeiten. Diese Datei listet alle externen Bibliotheken auf, die das Projekt benötigt, sowie deren Versionen.

  • Build-System: Cargo verwendet den Rust-Compiler (rustc), um Projekte zu bauen, und übernimmt automatisch die Kompilierung und Verknüpfung von Abhängigkeiten.

  • Paketregistry: Cargo interagiert mitcrates.io, der Paketregistry der Rust-Community, und ermöglicht Entwicklern, Bibliotheken von Drittanbietern zu suchen, hinzuzufügen und zu verwalten.

  • Build-Konfiguration: Durch dieCargo.tomlundCargo.lockDatei ermöglicht Cargo Entwicklern, Build-Optionen wie Compiler-Optionen, Features und Zielplattformen zu konfigurieren.

  • Projektvorlagen: Cargo bietet Vorlagen zum Erstellen neuer Projekte. Du kannst schnell ein neues Projekt mit demcargo newBefehl.

  • Testen: Cargo bietet einen einfachen Befehl,cargo testzum Ausführen der Unit-Tests des Projekts.

  • Benchmarking: Cargo unterstützt die Verwendung descargo benchBefehls für Benchmarking.

  • Veröffentlichung: Durch dencargo publishBefehl können Entwickler ihre Bibliotheken auf crates.io veröffentlichen, damit andere Entwickler sie nutzen können.

  • Benutzerdefinierte Build-Skripte: Cargo ermöglicht die Verwendung benutzerdefinierter Build-Skripte, um komplexere Build-Anforderungen zu bewältigen.

  • Multi-Target-Projekte: Cargo unterstützt das Definieren mehrerer Targets in einem Projekt, wie ausführbare Dateien, Bibliotheken, Tests und Benchmarks.

  • Plattformübergreifende Builds: Cargo unterstützt das Erstellen von Rust-Programmen auf mehreren Plattformen, einschließlich Windows, macOS, Linux und verschiedenen eingebetteten Systemen.

  • Build-Cache: Um Builds zu beschleunigen, verwendet Cargo einen Build-Cache, um kompilierte Abhängigkeiten zu speichern.

  • Offline-Arbeit: Cargo unterstützt das Arbeiten ohne Internetverbindung und verwendet automatisch lokal zwischengespeicherte Abhängigkeiten.

  • Plugin-System: Cargo ermöglicht Entwicklern, Plugins zu schreiben, um seine Funktionalität zu erweitern.

  • Umgebungsvariablen: Cargo unterstützt das Überschreiben des Standardverhaltens für Build und Ausführung durch Umgebungsvariablen.

Cargo-Features

Neben dem Erstellen von Projekten bietet Cargo auch eine Reihe von Funktionen wie das Bauen und Ausführen von Projekten. Bauen und Ausführen entsprechen den folgenden Befehlen:

  • cargo new <project-name>: Ein neues Rust-Projekt erstellen.
  • cargo build: Das aktuelle Projekt kompilieren.
  • cargo run: Das aktuelle Projekt kompilieren und ausführen.
  • cargo check: Das aktuelle Projekt auf Syntax- und Typfehler prüfen.
  • cargo test: Die Unit-Tests des aktuellen Projekts ausführen.
  • cargo update: Die in Cargo.toml angegebenen Abhängigkeiten auf ihre neuesten Versionen aktualisieren.
  • cargo --help: Cargo-Hilfeinformationen anzeigen.
  • cargo publish: Das Rust-Projekt auf crates.io veröffentlichen.
  • cargo clean: Temporäre Dateien und Verzeichnisse, die während des Build-Prozesses erzeugt wurden, bereinigen.

Konfigurieren eines Rust-Projekts in VSCode

Cargo ist ein großartiges Build-Tool. Wenn du es mit VSCode kombinierst, wird VSCode zu einer sehr komfortablen Entwicklungsumgebung.

Im vorherigen Kapitel haben wir das greeting-Projekt erstellt. Lass uns jetzt den greeting-Ordner mit VSCode öffnen (Hinweis: nicht example-greeting)。

Nachdem du greeting geöffnet hast, erstelle darin einen neuen Ordner.vscode(Beachte den Punkt vor vscode; wenn dieser Ordner bereits existiert, musst du ihn nicht erstellen). Erstelle im neu erstellten .vscode-Ordner zwei Dateien, tasks.json und launch.json, mit folgendem Inhalt:

tasks.json-Datei

{     "version": "2.0.0",     "tasks": [         {             "label": "build",             "type": "shell",             "command":"cargo",             "args": ["build"]         }     ] }

launch.json-Datei (gilt für Windows-Systeme)

{     "version": "0.2.0",     "configurations": [         {             "name": "(Windows) Starten",             "preLaunchTask": "build",             "type": "cppvsdbg",             "request": "launch",             "program": "${workspaceFolder}/target/debug/${workspaceFolderBasename}.exe",             "args": [],             "stopAtEntry": false,             "cwd": "${workspaceFolder}",             "environment": [],             "externalConsole": false         }, {             "name": "(gdb) Starten",             "type": "cppdbg",             "request": "launch",             "program": "${workspaceFolder}/target/debug/${workspaceFolderBasename}.exe",             "args": [],             "stopAtEntry": false,             "cwd": "${workspaceFolder}",             "environment": [],             "externalConsole": false,             "MIMode": "gdb",             "miDebuggerPath": "Geben Sie hier das Verzeichnis an, in dem sich GDB befindet",             "setupCommands": [                 {                     "description": "Pretty-Printing für gdb aktivieren",                     "text": "-enable-pretty-printing",                     "ignoreFailures": true                 }             ]         }     ] }

launch.json-Datei (anwendbar für Linux-Systeme)

{ "version": "0.2.0", "configurations": [ { "name": "Debuggen", "type": "gdb", "preLaunchTask": "build", "request": "launch", "target": "${workspaceFolder}/target/debug/${workspaceFolderBasename}",             "cwd": "${workspaceFolder}" } ] }

launch.json-Datei (anwendbar für Mac-OS-Systeme)

{ "version": "0.2.0", "configurations": [ { "name": "(lldb) Starten", "type": "cppdbg", "preLaunchTask": "build", "request": "launch", "program": "${workspaceFolder}/target/debug/${workspaceFolderBasename}", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "lldb" } ] }

Klicken Sie dann in der linken Seitenleiste von VSCode auf "Run".

Wenn Sie MSVC verwenden, wählen Sie "(Windows) Launch".

Wenn Sie MinGW verwenden und GDB installiert haben, wählen Sie "(gdb) Launch". Bevor Sie mit gdb starten, stellen Sie sicher, dass Sie "miDebuggerPath" in launch.json ausfüllen.

Das Programm beginnt dann mit dem Debuggen. Die Ausgabe des Laufs erscheint in der "Debug Console":

Debuggen von Rust in VSCode

Die Methode zum Debuggen von Programmen ähnelt der in anderen Umgebungen. Klicken Sie einfach auf den roten Punkt links neben der Zeilennummer, um einen Haltepunkt festzulegen. Wenn während der Ausführung ein Haltepunkt erreicht wird, pausiert das Programm, sodass Entwickler die Live-Werte der Variablen überwachen können.

Weitere Erweiterungen