Rust将特性传递给依赖项

3

我有一个三层系统。最底层是一个外部的C库,然后我创建了一个包装库,最后是一个纯Rust库。我在包装库中使用build.rs脚本构建C库。C库使用cmake构建,并且必须使用-DFEATURE1=ON-DFEATURE2=ON命令行开关进行配置。

我已经在包装库的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库已经正确构建。但是当我尝试从纯Rust库启动构建时,似乎功能请求没有正确传递到包装库:

rustlib/Cargo.toml

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

我也尝试过使用命令行替代方案:

bash% cargo build --features=wrapper/feature1

在这两种情况下,最终结果是功能请求未达到最终的C库。

1
你不应该使用 cfg!(feature = "feature1") 吗? - Chayim Friedman
1个回答

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接