如何基于Cargo feature为link属性添加条件式key?
实现条件性添加raw-dylib到link属性
你可以使用Rust的cfg_attr宏来实现这一需求,它能根据指定的Cargo feature条件,动态为link属性添加kind = "raw-dylib"参数,无需拆分整个属性。
具体代码实现
将原有的link属性修改为:
#[link( name = "foo", #[cfg_attr(feature = "use-raw-dylib", kind = "raw-dylib")] )]
或者更紧凑的单行写法:
#[link(name = "foo", cfg_attr(feature = "use-raw-dylib", kind = "raw-dylib"))]
原理说明
cfg_attr(feature = "use-raw-dylib", kind = "raw-dylib")的作用是:当用户启用use-raw-dylib特性时,这段代码会展开为kind = "raw-dylib"并加入link属性的参数列表;未启用时,该部分会被忽略,link属性保持原有的name = "foo"形式。
补充:在Cargo.toml中定义特性
别忘了在你的库的Cargo.toml里声明这个特性,让用户可以启用它:
[features] use-raw-dylib = []
用户启用特性的方式:
cargo build --features use-raw-dylib
内容的提问来源于stack exchange,提问作者rodrigocfd
相关产品推荐
相关产品推荐

