有没有一种方法可以根据常量的存在有条件地进行编译?

Is there a way to conditionally compile based on the existence of a constant?

libc 库定义了一些可以作为标志传递给 open() 的常量,例如 O_APPENDO_CREAT 等。其中一些标志仅针对某些特定对象定义OS 个目标。如果有一种方法可以在我的代码中自由使用 O_WHATEVER 而不必担心它是否实际在 libc:

中定义,那就太好了
#[cfg(???)]
const O_WHATEVER = libc::O_WHATEVER;
#[cfg(not(???))]
const O_WHATEVER = 0;

如果上面示例中的 ??? 是某种 is_defined(libc::O_WHATEVER) 就好了。否则,我需要弄清楚在 libc 中定义了 O_WHATEVER 的所有 OS 组合,这将是一个真正的痛苦。

不是 Rust 1.41。 RFC 2523 — cfg_version and cfg_accessible介绍:

#[cfg(accessible(libc::O_WHATEVER))]
const O_WHATEVER = libc::O_WHATEVER;