Cargo build --verbose --target=i686-linux-android 使得 target_os 而不是 android,为什么?

Cargo build --verbose --target=i686-linux-android makes target_os NOT android, why?

如果我用

构建我的项目

cargo build --verbose --target=i686-linux-android

其中 build.rs 看起来像这样

fn main() {
    #[cfg(target_os = "linux")]
    {
        panic!("target_os is linux!!!!!!!!!!!!!");
    }

我在 panic!("target_os is linux!!!!!!!!!!!!!"); 处感到恐慌,但目标是 android。

为什么?

build.rs 脚本被编译并且 运行 本地 因此它的 #[cfg(...)] 属性将反映 local系统。如果您想知道您最终要构建的操作系统,请使用 CARGO_CFG_TARGET_OS 环境变量。

其他的可以在Environment variables Cargo sets for build scripts中的Rust Reference中看到。