在Rust源代码中,文件rust/src/tools/rustfmt/src/parse/macros/cfg_if.rs的作用是为了解析和处理Rust宏中的cfg_if!宏。 Rust中的cfg_if!宏允许在编译时根据不同的条件选择不同的代码路径。它类似于条件编译指令,但更强大和灵活。cfg_if!宏接受一个cfg标识符和对应的代码块,根据当前编译环境的配置选择性地编译...
你也可以通过一个基于cfg变量的cfg_attr来设置另一个属性: #[cfg_attr(a, b)] # fn foo() {} 如果a通过cfg属性设置了的话这与#[b]相同,否则不起作用。 cfg! cfg![语法扩展](Compiler Plugins 编译器插件.md)也让你可以在你的代码中使用这类标记: if cfg!(target_os = "macos") || cfg!(targe...
fn are_you_on_linux() { println!("linux!") } // 仅当目标系统不是Linux 时才会编译 #[cfg(not(target_os = "linux"))] fn are_you_on_linux() { println!("not linux!") } fn main() { are_you_on_linux(); println!("Are you sure?"); if cfg!(target_os = "linux") { println!
例如log 包,它有几个features 可以用于在编译期选择最大的日志级别,这里,它就使用了 cfg-if 的方式来设置优先级。一旦多个 features 被启用,那更高优先级的就会优先被启用。 过程宏包 一些包拥有过程宏,这些宏必须定义在一个独立的包中。但是不是所有的用户都需要过程宏的,因此也无需引入该包。 在这种情况下...
这是一个名为cfg-if的宏,用于根据多个参数的条件定义项目。它的结构类似于if-else链,第一个匹配的分支会被生成。这个宏可以帮助在Rust中根据不同条件定义函数或代码块,使代码更具灵活性。它的许可证包括Apache License 2.0和MIT license,可以根据您的选择来使用。
[cfg(windows)]fn symbolic_link_dll(exe_dir: &PathBuf) { const DLL_FILE: &str = "auxiliaries_native.dll"; let mut dll_origin = env::current_dir().unwrap(); dll_origin.push("assets"); dll_origin.push(DLL_FILE); if dll_origin.exists() { let dll_symbol = exe_dir.join(DLL_FILE...
libcfg_if-1762d9ac100ea3e7.rlib""/usr/local/Cellar/rust/1.70.0/lib/rustlib/x86_64-apple-darwin/lib/liblibc-f8e0e4708f61f3f4.rlib""/usr/local/Cellar/rust/1.70.0/lib/rustlib/x86_64-apple-darwin/lib/liballoc-af9a608dd9cb26b2.rlib""/usr/local/Cellar/rust/1.70.0/lib/rustlib/x86...
#[cfg(any(foo, bar))] 若条件`foo`或`bar`任意一个成立,则编译以下的Item #[cfg(not(foo))] 若`foo`不成立时编译 条件编译属性只可以应用于Item,如果想应用在非Item中怎么办呢?可以使用cfg!宏,如 if cfg!(target_arch = "x86") { } else if cfg!(target_arch = "x86_64") { ...
#[cfg(feature = "tokio_rt")] pub async fn call_async(&self, value: Result) -> Result { let (sender, receiver) = tokio::sync::oneshot::channel::>(); self.handle.with_read_aborted(|aborted| { if aborted { return Err(crate::Error::from_status(Status::Closing)); ...
crossbeam v0.8.1(/Users/liuhao/rust/crossbeam)├── cfg-ifv1.0.0├── crossbeam-channel v0.5.2(/Users/liuhao/rust/crossbeam/crossbeam-channel)│ ├── cfg-ifv1.0.0│ └── crossbeam-utils v0.8.7(/Users/liuhao/rust/crossbeam/crossbeam-utils)│ ├── cfg-ifv1.0.0│ └── lazy...