编译时检查编译器是否为 nightly

The*_*ohn 7 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
Run Code Online (Sandbox Code Playgroud)

Jmb*_*Jmb 7

您可以使用rustc_version箱和 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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

#[cfg(feature = "RUSTC_IS_STABLE")]然后在 Rust 代码中使用 等进行检查。