gpt4 book ai didi

rust - 如何在不使用构建脚本的情况下将可执行文件的完整目标三重作为编译时常量?

转载 作者:行者123 更新时间:2023-11-29 08:06:06 25 4
gpt4 key购买 nike

我正在编写一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com