相关疑难解决方法(0)

我可以根据平台设置 Cargo 项目的默认功能吗?

default 是否可以使功能列表依赖于您的平台Cargo.toml?我想使用功能来选择依赖于平台的依赖项。

我会想象这样的事情:

[features]
# on Unix
default = ["feature-a"]
# not on Unix
default = ["feature-b"]

feature-a = ["dep-a"]
feature-b = ["dep-b"]

[dependencies]
dep-a = { version = "*", optional = true }
dep-b = { version = "*", optional = true }
Run Code Online (Sandbox Code Playgroud)

我试过了:

  • 使用[target.'cfg(unix)'.features]不起作用,它被忽略:

    [target.'cfg(unix)'.features]
    default = ["feature-a"]
    # -- snip --
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用build.rs脚本根据cfg条件启用功能只能部分起作用。依赖关系解析是在运行之前完成的build.rs,因此这不会导入其中启用的功能的可选依赖关系。此示例不会导入dep-a

    fn main() {
        #[cfg(unix)]
        println!("cargo:rustc-cfg=feature=\"feature-a\"");
        // -- snip --
    }
    
    Run Code Online (Sandbox Code Playgroud)

这可以在 Rust …

rust rust-cargo

13
推荐指数
1
解决办法
3833
查看次数

如何根据 Cargo 功能选择性地传递 rustc 标志?

-C target-cpu=native 当标志传递给时,我正在编写的程序运行得更快rustc。我想为用户提供一种简单的、独立于平台的方式来在编译时启用此功能,因此我cpu_native = []在 Cargo.toml 中添加了 Cargo 功能,并在我的项目中创建了这个 Cargo 配置:

[target.'cfg(cpu_native)']
rustflags = ["-C", "target-cpu=native"]
Run Code Online (Sandbox Code Playgroud)

然而,这对我的程序没有影响,传递--features cpu_native给 Cargo 甚至不会触发重新编译。更改为以下 Cargo 配置确实会强制使用更快的指令重新编译:

[build]
rustflags = ["-C", "target-cpu=native"]
Run Code Online (Sandbox Code Playgroud)

然而,这将target-cpu=native使用默认的 Cargo 功能进行编译,这不是我想要的。从货物书中,我想要的似乎是可能的,但我不明白我做错了什么。

rust rust-cargo

4
推荐指数
1
解决办法
2163
查看次数

标签 统计

rust ×2

rust-cargo ×2