我正在编写一个 Cargo 辅助命令,它需要知道 Rust/Cargo 使用的默认目标三元组(我假设它与主机的目标三元组相同)。理想情况下,它应该是一个编译时常量。
有 ARCH
常量,但不是完整的三元组。例如,它不区分软浮点和硬浮点 ARM ABI。
env!("TARGET")
将是理想的,但它仅为构建脚本设置,而不是 lib/bin 目标。我可以使用 build.rs
和动态源代码生成将它传递给 lib(将值写入 OUT_DIR
中的 .rs
文件) , 但仅仅为了获得一个编译器无论如何都必须知道的字符串似乎是一项艰巨的任务。
有没有更直接的方法在用 Cargo 构建的 lib/bin 目标中获取当前目标三元组?
最佳答案
构建脚本打印一些 additional output到一个文件,所以你不能确定构建脚本只打印了 $TARGET
的输出。
相反,在 build.rs 中尝试这样的事情:
fn main() {
println!(
"cargo:rustc-env=TARGET={}",
std::env::var("TARGET").unwrap()
);
}
这将在构建脚本中获取 $TARGET
环境变量的值并设置它,以便在程序启动时可以访问它。
在我的 main.rs 中:
const TARGET: &str = env!("TARGET");
现在我可以在我的程序中访问目标三元组。如果您使用这种技术,您将只会读取 TARGET
环境变量的值,而不会读取其他任何内容。
关于rust - 如何在不使用构建脚本的情况下将可执行文件的完整目标三重作为编译时常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48967583/