我正在尝试基于target_os
设置常量的值。我希望实现如下内容:
#[cfg(target_os = "linux")]
const MAP_FLAGS: libc::c_int = libc::MAP_POPULATE;
#[cfg(target_os = "macos")]
const MAP_FLAGS: libc::c_int = libc::MAP_NOCACHE;
#[cfg(/* ELSE */)]
const MAP_FLAGS: libc::c_int = 0;
现在,自然的想法是使用cfg!
宏,但这不会编译,因为libc::MAP_POPULATE
只存在于linux目标上,而libc::MAP_NOCACHE
只存在于macos目标上。
你知道怎么解决吗?
2条答案
按热度按时间bzzcjhmw1#
听起来你可能想尝试使用
cfg-if
crate,它提供了一个宏(cfg_if
),允许在if-else结构中进行条件编译。也就是说,这只是
#[cfg(target_os = "linux")]
、#[cfg(all(target_os = "macos", not(target_os = "linux")))]
和#[cfg(all(not(target_os = "macos"), not(target_os = "linux")))]
的语法糖。bvjveswy2#
我认为你已经很接近了,如果你只想为非linux或macos的任何东西设置默认值,你可以把
not()
和any()
结合起来: