我有一个有三层的系统.最底层是一个外部C库,然后我创建了一个包装库,最后在上面创建了一个纯Ruust库.我用包装器库中的build.rs
脚本构建C库.C库是用cmake构建的,必须配置-DFEATURE1=ON
和-DFEATURE2=ON
命令行switch .
我已经在包装库的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库的包装库and.但是,当我try 从纯RUST库启动构建时,功能请求似乎没有正确地传递到包装库:
rustlib/Cargo.toml
个
[dependencies.wrapper]
path="wrapper"
features=["feature1"]
...
我还try 使用命令行替代方法:
bash% cargo build --features=wrapper/feature1
在这两种情况下,最终结果都是特性请求没有到达最终的C库.