检查编译器是否在编译时每晚

时间:2018-03-13 03:00:07

标签: rust

就是这样:我如何知道该项目是由夜间编译还是稳定编译器构建的?像这样:

#[cfg(nightly_build)]
use std::ptr::Shared; // on nightly use system's version

#[cfg(not(nightly_build))]
use myshared::Shared; // on stable use my unoptimized Shared

2 个答案:

答案 0 :(得分:4)

您可以使用rustc_version crate和build.rs脚本执行此操作:

extern crate rustc_version;
use rustc_version::{version_meta, Channel}

fn main() {
    // Set cfg flags depending on release channel
    match version_meta().unwrap().channel {
        Channel::Stable => {
            println!("cargo:rustc-cfg=RUSTC_IS_STABLE");
        }
        Channel::Beta => {
            println!("cargo:rustc-cfg=RUSTC_IS_BETA");
        }
        Channel::Nightly => {
            println!("cargo:rustc-cfg=RUSTC_IS_NIGHTLY");
        }
        Channel::Dev => {
            println!("cargo:rustc-cfg=RUSTC_IS_DEV");
        }
    }
}

然后使用#[cfg(feature = "RUSTC_IS_STABLE")]

进行检查

答案 1 :(得分:2)

我知道有两种选择。

1。 在Cargo.toml中使用此功能,并在您的代码中使用它,如下所示:#![cfg_attr(feature = "unstable", feature(nonzero, specialization))]

2。 使用build.rs文件并检查环境变量CFG_RELEASE_CHANNEL。请注意,我无法在官方Documentation中找到它,所以请事先尝试一下。