【问题标题】:Rust Cargo build and crosscompile for specific CPURust Cargo 为特定 CPU 构建和交叉编译
【发布时间】:2020-12-28 20:49:14
【问题描述】:

我想为不同的目标架构(例如 Skylake 和 Sandy Bridge)编译两个二进制文件。 这些通常是两个冗长的货物命令:

RUSTFLAGS="-C target-cpu=skylake" 货物构建 --target x86_64-unknown-linux-gnu --release

如何设置 cargo 以自动从同一个 main.rs 构建两个二进制文件(具有不同的名称)? 理想情况下在config.tomlCargo.toml 中,这样我就可以将它添加到存储库中。

【问题讨论】:

  • 为什么不创建一个运行这两个命令的build.sh
  • 我可以这样做,但这感觉不是很好的做法。特别是因为构建目标通常在 Cargo.toml 中指定
  • 不是你问的那样,但是 arch 模块有 dynamic CPU-feature detection 的文档以避免创建多个二进制文件。
  • @maxy 很有趣。但现在我相信编译器会根据目标架构进行优化。

标签: rust cross-compiling rust-cargo


【解决方案1】:

您可以将以下文字添加到您的config.toml

[build]
target = x86_64-unknown-linux-gnu
rustflags = ["-C","target-cpu=skylake"]

[profile.dev]   #do not need to add `--release` now
opt-level = 3
debug = false
debug-assertions = false
overflow-checks = false
lto = false
panic = 'unwind'
incremental = false
codegen-units = 16
rpath = false

但它似乎无法用一个config.toml 编译两个不同的目标架构,因此您可能必须创建两个config.toml 并使用cargo --manifest-path PATH/TO/CONFIG 分别编译两个二进制文件。

【讨论】:

    猜你喜欢
    • 2022-10-05
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    相关资源
    最近更新 更多