以其他名称重新导出模块

时间:2020-06-22 13:06:45

标签: rust

我想编写一个跨平台的库,因此我编写了以下代码

pub mod common;
#[cfg(target_os = "Linux")]
pub mod process_linux;

#[cfg(target_os = "Windows")]
pub mod process_windows;

但是现在我想在名称过程下重新导出两个模块。 这容易吗?我想我将来可能需要阅读有关模块和名称空间的更多信息,我尝试了以下操作:

pub mod process {
    #[cfg(target_os = "Linux")]
    pub use process_linux::*;

    #[cfg(target_os = "Windows")]
    pub use process_windows::*;
}

但是它仍然无法像我想要的那样工作,也许有人可以找到答案。

编辑: 例如,我希望能够在不同的机器上运行相同的代码,但是目前导入无法正常工作,我必须改用process_linux:

// doesnt work
use tryolib::process::*;
// works
use tryolib::process_linux::*;

好,所以我现在尝试:

#[cfg(target_os = "Linux")]
mod process_linux;

#[cfg(target_os = "Windows")]
mod process_windows;

#[cfg(target_os = "Linux")]
pub use process_linux as process;

#[cfg(target_os = "Windows")]
pub use process_windows as process;

1 个答案:

答案 0 :(得分:1)

您只是有错字,操作系统必须是小写字母(如reference states)。以下代码有效(playground):

#[cfg(target_os = "linux")]
pub mod process_linux {
    pub type T = ();
}

#[cfg(target_os = "linux")]
use process_linux as process;

fn main() {
    let _: process::T = ();
}