Rust mit Meson verwenden

Vermeiden Sie die Verwendung von extern crate

Meson kann keine Abhängigkeitsinformationen für Crate verfolgen, die von rustc als Ergebnis von extern crate -Anweisungen in Rust-Quellcode verknüpft sind. Wenn Ihre Crate-Abhängigkeiten ordnungsgemäß in Meson ausgedrückt sind, sollten keine extern crate -Anweisungen in Ihrem Rust-Code erforderlich sein, solange Sie die Rust 2018 Edition oder später verwenden. Dies bedeutet, dass Sie rust_std=2018 (oder später) zu dem Argument project(default_options) hinzufügen müssen.

Ein Beispiel für die Probleme mit extern crate ist, dass, wenn Sie eine Crate aus einer Meson-Build-Datei löschen, andere Crates, die von dieser Crate mit extern crate abhängen, möglicherweise weiterhin mit dem verbleibenden rlib der gelöschten Crate verknüpft werden, anstatt einen Build-Fehler zu verursachen, bis das Build-Verzeichnis bereinigt ist.

Diese Einschränkung könnte in Zukunft mit Verbesserungen von rustc behoben werden, zum Beispiel, wenn das -Z binary-dep-depinfo -Feature stabilisiert wird.

Mischen von Rust- und Nicht-Rust-Quellen

Meson unterstützt derzeit nicht die Erstellung eines einzelnen Ziels, das Rust- und Nicht-Rust-Quellen mischt. Daher müssen mehrere Bibliotheken kompiliert und verknüpft werden.

rust_lib = static_library(
    'rust_lib',
    sources : 'lib.rs',
    ...
)

c_lib = static_library(
    'c_lib',
    sources : 'lib.c',
    link_with : rust_lib,
)

Dies ist ein Implementierungsdetail von Meson und kann sich in Zukunft ändern.

Mischen von generierten und statischen Quellen

Hinweis Dieses Feature wurde in Version 0.62 hinzugefügt.

Sie können dafür ein structured_src verwenden. Strukturierte Quellen sind ein Wörterbuch, das eine Zeichenkette des Verzeichnisses auf eine Quelle oder eine Liste von Quellen abbildet. Bei Verwendung einer strukturierten Quelle müssen alle Eingaben aufgeführt werden, da Meson die Quellen aus dem Quellbaum in den Build-Baum kopieren kann.

Strukturierte Eingaben sind im Allgemeinen nicht erforderlich, wenn keine generierten Quellen verwendet werden.

Als Implementierungsdetail versucht Meson zu erkennen, ob Dateien zur Konfigurationszeit kopiert werden müssen, und überspringt das Kopieren, wenn möglich. Das Kopieren erfolgt zur Build-Zeit (wenn nötig), um eine Neukonfiguration bei Änderungen an den Quellen zu vermeiden.

executable(
    'rust_exe',
    structured_sources(
        'main.rs',
        {
            'foo' : ['bar.rs', 'foo/lib.rs', generated_rs],
            'foo/bar' : [...],
            'other' : [...],
        }
    )
)

Verwendung mit rust-analyzer

Seit Version 0.64.0.

Meson generiert eine rust-project.json -Datei im Stammverzeichnis des Build-Verzeichnisses, wenn sich rust-Ziele im Projekt befinden. Die meisten IDEs müssen konfiguriert werden, um die Datei zu verwenden, da sie sich nicht im Quellverzeichnis befindet (Meson schreibt keine Dateien in das Quellverzeichnis). Siehe die Upstream-Dokumentation für weitere Informationen zur Konfiguration.

Verknüpfen mit Standardbibliotheken

Meson wird die Rust-Standardbibliotheken (z. B. libstd) statisch verknüpfen, es sei denn, das Ziel ist ein Proc-Makro oder eine dylib, oder es hängt von einer dylib ab. In diesem Fall wird -C prefer-dynamic an den Rust-Compiler übergeben, und die Standardbibliotheken werden dynamisch verknüpft.

Die Ergebnisse der Suche sind