我有一个有三层的系统.最底层是一个外部C库,然后我创建了一个包装库,最后在上面创建了一个纯Ruust库.我用包装器库中的build.rs脚本构建C库.C库是用cmake构建的,必须配置-DFEATURE1=ON-DFEATURE2=ON命令行switch .

我已经在包装库的Cargo.toml文件中配置了铁 rust 特性feature1feature2:

wrapper/Cargo.toml:

[features]
feature1=[]
feature2=[]
...

build.rs中,我使用cfg!()宏将正确的选项传递给cmake:

use cmake::Config;
...
let mut config = Config::new("");
if !cfg(feature1) {
    config.define("FEATURE1", "ON");
}

当我构建包装库时,我可以使用以下命令将正确的特性传递给构建步骤:

bash% cargo build --features=feature1

并且正确地构建了底层C库的包装库and.但是,当我try 从纯RUST库启动构建时,功能请求似乎没有正确地传递到包装库:

rustlib/Cargo.toml

[dependencies.wrapper]
path="wrapper"
features=["feature1"]
...

我还try 使用命令行替代方法:

bash% cargo build --features=wrapper/feature1

在这两种情况下,最终结果都是特性请求没有到达最终的C库.

推荐答案

据我所知,构建脚本没有启用cfg个功能.我不知道当您直接在包上调用cargo build时它为什么会起作用.

To inspect enabled features in build scripts, check the existence of the environment variable CARGO_FEATURE_<name>.

Rust相关问答推荐

有没有方法处理rust中嵌套的ok_or()?

通用池类型xsx

为什么是!为Rust中的RwLockReadGuard和RwLockWriteGuard实现的发送特征?

为什么我们不能通过指针算法将Rust原始指针指向任意地址?'

返回的future 不是`发送`

当T不执行Copy时,如何返回Arc Mutex T后面的值?

有没有一种惯用的方法来判断VEC中是否存在变体?

我应该如何表达具有生命周期参数的类型的总排序,同时允许与不同生命周期进行比较?

是否可以在不直接重复的情况下为许多特定类型实现一个函数?

如何从宏调用闭包?

如何处理闭包中的生命周期以及作为参数和返回类型的闭包?

需要一个有序向量来进行 struct 初始化

在 Rust 中忽略 None 值的正确样式

Rust 文件未编译到 dll 中

Rust 为什么被视为borrow ?

Rust中是否可以在不复制的情况下从另一个不可变向量创建不可变向量?

str 和 String 的 Rust 生命周期

如何使用 Rust Governor 为每 10 秒 10 个请求创建一个 RateLimiter?

我如何取消转义,在 Rust 中多次转义的字符串?

当 `T` 没有实现 `Debug` 时替代 `unwrap()`