如何在Cargo.toml中为lib使用条件编译?

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

我有一个 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
的重复行太多)。

rust rust-cargo
1个回答
0
投票

将当前的

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::*;
© www.soinside.com 2019 - 2024. All rights reserved.