我要override a build script,这意味着添加一个如下所示的配置节:
[target.x86_64-unknown-linux-gnu.foo]
rustc-link-search = ["/path/to/foo"]
rustc-link-lib = ["foo"]
root = "/path/to/foo"
key = "value"
但是我使用的是Mac,因此x86_64-unknown-linux-gnu
不是正确的目标三元组。
我如何发现当前正在使用的目标三重锈钢或货物?
rustc --print cfg
打印出一个似乎与三元组不对应的值的列表(尤其是其中没有unknown
)。
rustc --print target-list
显示所有可用的目标;我只想要默认值。
答案 0 :(得分:4)
rustc --print cfg
将输出如下内容:
$ rustc --print cfg
debug_assertions
target_arch="x86_64"
target_endian="little"
target_env="gnu"
target_family="unix"
target_feature="fxsr"
target_feature="sse"
target_feature="sse2"
target_os="linux"
target_pointer_width="64"
target_vendor="unknown"
unix
目标是<arch>-<vendor>-<os>-<env>
。
答案 1 :(得分:1)
使用最新的Rustc编译器:
$ rustc -Z unstable-options --print target-spec-json | grep llvm-target
答案 2 :(得分:1)
对我有用的东西(受罗德里戈的回答启发)
RUSTC_BOOTSTRAP=1 rustc -Z unstable-options --print target-spec-json | python3 -c 'import json,sys;obj=json.load(sys.stdin);print(obj["llvm-target"])'
RUSTC_BOOTSTRAP = 1绕过通常只允许在夜间分支上使用某些功能的检查。我还使用了正确的json解析器而不是grep。
答案 3 :(得分:1)
也许不是特别优雅,但是我发现它可以工作:
rustup show | grep default | grep -Po "^[^-]+-\K\S+"
答案 4 :(得分:1)
cargo 使用 rustc -vV
来检测默认的目标三元组 (source)。我们可以做同样的事情:
use std::process::Command;
use anyhow::{format_err, Context, Result};
use std::str;
fn get_target() -> Result<String> {
let output = Command::new("rustc")
.arg("-vV")
.output()
.context("Failed to run rustc to get the host target")?;
let output = str::from_utf8(&output.stdout).context("`rustc -vV` didn't return utf8 output")?;
let field = "host: ";
let host = output
.lines()
.find(|l| l.starts_with(field))
.map(|l| &l[field.len()..])
.ok_or_else(|| {
format_err!(
"`rustc -vV` didn't have a line for `{}`, got:\n{}",
field.trim(),
output
)
})?
.to_string();
Ok(host)
}
fn main() -> Result<()> {
let host = get_target()?;
println!("target triple: {}", host);
Ok(())
}
答案 5 :(得分:0)
如果您使用rustup
来管理Rust安装,它将告诉您当前的默认目标:
macbookpro$ rustup target list | grep '(default)' | awk '{print $1}'
x86_64-apple-darwin
linux-mint$ rustup target list | grep '(default)' | awk '{print $1}'
x86_64-unknown-linux-gnu
还请注意,rustup show active-toolchain
将显示stable-x84_64-apple-darwin
之类的内容,其中包括当前目标(在stable-
或nightly-
之后)。
答案 6 :(得分:0)
我编写了很多跨平台的 shell 脚本或 Python 程序,需要检查我当前的 Rust 默认目标三元组。不过,我不喜欢手动搜索字符串值。
为了更容易获得默认的目标三元组,我将 konstin's answer 打包成一个命令行工具。
您可以通过以下方式安装:
cargo install default-target
然后您只需运行以下程序即可使用该程序:
default-target
它会返回您当前的目标三元组。类似于 x86_64-apple-darwin
或 x86_64-unknown-linux-gnu
。