在 Meson 中使用 Rust
避免使用 extern crate
Meson 無法追蹤 Rust 原始碼中因 extern crate
語句而連結的 crate 的相依性資訊。如果你的 crate 相依性已在 Meson 中正確表示,只要你使用 Rust 2018 版本或更新版本,就不需要在 Rust 程式碼中使用 extern crate
語句。這表示需要在 project(default_options)
引數中加入 rust_std=2018
(或更新版本)。
extern crate
的問題範例是,如果你從 Meson 建置檔案中刪除一個 crate,其他使用 extern crate
相依於該 crate 的 crate 可能會繼續與刪除的 crate 的殘留 rlib 連結,而不是建置失敗,直到清除建置目錄為止。
這個限制未來可能會透過 rustc 的改進來解決,例如,如果 -Z binary-dep-depinfo
功能穩定下來的話。
混合 Rust 和非 Rust 來源
Meson 目前不支援將 Rust 和非 Rust 來源混合在單一目標中,因此必須編譯多個程式庫並將它們連結起來。
rust_lib = static_library(
'rust_lib',
sources : 'lib.rs',
...
)
c_lib = static_library(
'c_lib',
sources : 'lib.c',
link_with : rust_lib,
)
這是 Meson 的實作細節,未來可能會有所變動。
混合產生和靜態來源
注意 此功能已在 0.62 中新增
你可以使用 structured_src
來完成此操作。結構化來源是一個字典,將目錄字串對應到一個來源或來源清單。當使用結構化來源時,必須列出所有輸入,因為 Meson 可能會將來源從來源樹複製到建置樹。
當不使用產生來源時,通常不需要結構化輸入。
作為實作細節,Meson 會嘗試在配置時判斷是否需要複製檔案,如果可以,則會跳過複製。複製會在建置時完成(必要時),以避免在來源變更時重新配置。
executable(
'rust_exe',
structured_sources(
'main.rs',
{
'foo' : ['bar.rs', 'foo/lib.rs', generated_rs],
'foo/bar' : [...],
'other' : [...],
}
)
)
與 rust-analyzer 一起使用
自 0.64.0 起。
如果專案中有任何 rust 目標,Meson 會在建置目錄的根目錄中產生一個 rust-project.json
檔案。大多數 IDE 都需要配置為使用該檔案,因為它不在來源根目錄中(Meson 不會將檔案寫入來源目錄)。請參閱上游文件,以取得有關如何配置的更多資訊。
與標準程式庫連結
Meson 會靜態連結 Rust 標準程式庫(例如 libstd),除非目標是 proc macro 或 dylib,或它相依於 dylib,在這種情況下,-C prefer-dynamic
將會傳遞給 Rust 編譯器,並且標準程式庫將會動態連結。
搜尋結果如下