我正在使用 FFI 到 C 代码编写一个 Windows 库,并且我正在使用 link 属性:
#[link(name = "foo")]
以上效果完美。
现在,我想提供一个 cargo 功能,当用户包含该功能时,将启用 raw-dylib 键:
[features]
use-raw-dylib = []
#[link(name = "foo")] // without "use-raw-dylib" feature
#[link(name = "foo", kind = "raw-dylib")] // with "use-raw-dylib" feature
这与条件性包括整个属性不一样。我只想包含一把钥匙。
如何实现这个条件?
Rust 没有内置方法来有条件地转换属性,因此最简单的方法是使用或不使用键复制属性:
#[cfg_attr(feature = not("use-raw-dylib"), link(name = "foo"))]
#[cfg_attr(feature = "use-raw-dylib", link(name = "foo", kind = "raw-dylib"))]