3 个不稳定版本

0.2.0 2020年7月13日
0.1.1 2020年7月12日
0.1.0 2020年7月12日

#5#依赖

MIT 许可证

27KB
477

Realia

此crate提供基于各种检查的条件编译宏。这些宏与 #[cfg(...)]#[cfg_attr(...)] 类似。

Realia受到rustversion的启发,并在此基础上做了大量改进。

属性

主要

  • 环境变量
    • #[realia::env("FOO")]
      • 检查 FOO 环境变量是否存在。
    • #[realia::env("FOO", "bar")]
      • 检查 FOO 环境变量的值是否为 bar
  • 可执行文件
    • #[realia::cmd("foo")]
      • 检查是否在 PATH 环境变量中存在可执行文件 foo
  • 依赖(考虑特定目标,但不考虑可选依赖项)
    • #[realia::dep("your-crate", "foo")]
      • 检查你的crate是否使用了 foo crate的任何版本。
    • #[realia::dep("your-crate", "foo", "1.2.3")]
      • 检查你的crate是否使用了恰好为1.2.3版本的 foo crate。
    • #[realia::dep_since("your-crate", "foo", "1.2.3")]
      • 检查你的crate是否使用了版本为1.2.3或更高版本的 foo crate。
    • #[realia::dep_before("your-crate", "foo", "1.2.3")]
      • 检查你的crate是否使用了版本在1.2.3之前的 foo crate。
    • #[realia::dep_from_registry("your-crate", "foo")]
      • 检查你的crate是否从注册表中使用了 foo crate(而不是作为 gitpath 依赖)。这在有 发布回退 的情况下很有用。

以上属性可以通过以下附加属性进行细化或增强

  • #[realia::not(env("FOO"))]
    • 反转条件。
  • #[realia::any(env("FOO"), env("bar"))]
    • 检查是否满足任一条件。
  • #[realia::all(env("FOO"), env("bar"))]
    • 检查是否满足所有条件。
  • #[realia::attr(env("FOO"),some_attr)]
    • 当条件满足时应用 #[some_attr]。您也可以这样指定 const

在条件改变时触发构建

如果您使用 envcmd 属性,您需要在项目中包含一个 build.rs 文件,其中包含您检查的任何环境变量。

fn main() {
    // Necessary when using #[realia::env("FOO")]
    println!("cargo:rerun-if-env-changed=FOO");

    // Necessary when using #[realia::cmd(...)]
    println!("cargo:rerun-if-env-changed=PATH");
}

依赖项

~3–12MB
~154K SLoC