我有一个 Rust 实现,使用
lib
中定义的 Cargo.toml
:
[lib]
path = "src/lib.rs"
我有一个特定于 Linux 操作系统的替代实现
src/lib_linux.rs
。我想通过 Cargo.toml
通过带有 cfg
关键字的条件编译来使用它:
[lib.'cfg(not(target_os = "linux"))']
path = "src/lib.rs"
[lib.'cfg(target_os = "linux")']
path = "src/lib_linux.rs"
我知道目前(Rust 1.74.0),无法在
cfg
中使用 Cargo.toml
关键字来表示 lib
=> 请参阅 https://github.com/rust-lang/cargo /问题/12260
你有办法解决我的问题吗?我不想在
cfg(target_os = "linux")
中使用带有 src/lib.rs
的条件编译(带有 cfg
的重复行太多)。
将当前的
lib.rs
和 lib_linux.rs
重命名为其他名称,例如 impl.rs
和 impl_linux.rs
。
然后,有条件地定义并从这些模块中重新导出:
// lib.rs
#[cfg(not(target_os = "linux"))]
mod impl;
#[cfg(not(target_os = "linux"))]
pub use impl::*;
#[cfg(target_os = "linux")]
mod impl_linux;
#[cfg(target_os = "linux")]
pub use impl_linux::*;