是否可以有条件地包含一个[[example]]
?我有一个例子,它只运行在 *nix上,所以它会导致windows上的错误。
我试图避免在main.rs
顶级项目上都编写#[cfg(not(target_family = "windows"))]
,并且我也不想损害代码结构(引入额外的模块)或扰乱IDE集成。
将[[example]]
更改为[[target.'cfg(not(target_family = "windows"))'.example]]
(在Cargo.toml
中)不起作用。
将#![cfg(not(target_family = "windows"))]
添加到文件的顶部会导致:
机箱my_example
中未找到main
函数
添加#![cfg_attr(target_family = "windows", crate_type = "lib")]
并不能解决这个问题,因为:#![cfg_attr] attribute is deprecated
中的crate_type
还尝试使用声明性宏,但它实际上不工作(似乎item
不匹配mod
规则),即使它确实工作,也不理想,因为它会扰乱IDE帮助。
macro_rules! no_windows {
(
$( x:item )*
) => {
$(
#[cfg(not(target_family = "windows"))]
$x
)*
#[cfg(target_family = "windows")]
fn main() {
unimplemented!();
}
};
}
no_windows! {
// normal code here
}
1条答案
按热度按时间af7jpaap1#
也许有更好的办法,但像这样的应该行得通