定位 Cargo 工作区中的特定包

Gam*_*ril 6 rust rust-cargo

是否可以有条件地将货物包包含在工作区中或告诉货物包 Cargo.toml 文件中的货物忽略它们?

假设我有一个包含包的工作区,它只能在合适的平台上编译。

[workspace]
members = [
    "main",
    "lib_common",
    "lib_linux_only",
    "lib_macos_only",
]
Run Code Online (Sandbox Code Playgroud)

所有 lib 包都是动态库,因此其中一些库不会在所有平台上构建,这是可以接受的(因为主可执行文件在运行时知道要加载或不加载其中的哪一个)。但它应该“悄然”发生。

在特定于平台的模块中,我有一个条件编译检查,例如

#[cfg(not(target_os = "linux"))]
compile_error!("This feature requires Linux");
Run Code Online (Sandbox Code Playgroud)

这意味着我无法运行主可执行文件,因为无法构建特定于平台的包。在这种情况下,我必须注释掉 mac 上的 linux 软件包和 linux 上的 mac 软件包。

小智 5

目前似乎没有优雅的方法来做到这一点。查看这个未解决的问题来跟踪此功能请求。