我有一个三层系统。最底层是一个外部的C库,然后我创建了一个包装库,最后是一个纯Rust库。我在包装库中使用build.rs
脚本构建C库。C库使用cmake构建,并且必须使用-DFEATURE1=ON
和-DFEATURE2=ON
命令行开关进行配置。
我已经在包装库的Cargo.toml
文件中配置了Rust特性feature1
和feature2
:
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库。
cfg!(feature = "feature1")
吗? - Chayim Friedman