如何基于 Cargo 功能向属性添加条件键?

问题描述 投票:0回答:1

我正在使用 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 rust-cargo conditional-compilation cargo-features
1个回答
0
投票

Rust 没有内置方法来有条件地转换属性,因此最简单的方法是使用或不使用键复制属性:

#[cfg_attr(feature = not("use-raw-dylib"), link(name = "foo"))]
#[cfg_attr(feature = "use-raw-dylib", link(name = "foo", kind = "raw-dylib"))]
© www.soinside.com 2019 - 2024. All rights reserved.