当使用gcc时,我可以通过运行gcc -dumpmachine
来得到gcc认为是我的主机的三元组,在我当前的系统上,这将得到x86_64-linux-gnu
。
我如何获得稳定的rustc
来打印我的主机三重?(在本例中为x86_64-unknown-linux-gnu
)rustc
的文档中除了--print
和--version
之外似乎没有包含任何相关的内容,也没有生成主机目标三元组。
- 澄清**:到目前为止,关于nightly有两个答案,我想强调的是,这个问题是专门针对 * stable *
rustc
编译器的。
- 澄清**:到目前为止,关于nightly有两个答案,我想强调的是,这个问题是专门针对 * stable *
4条答案
按热度按时间tsm1rwdh1#
将给予如下输出:
其中host是你的目标三元组。
um6iljoc2#
使用Rust nightly,您可以打印“目标规范JSON”:
要在命令行上解析目标三元组,可以使用
jq
这样的工具:这还不稳定(因此需要
-Z unstable-options
编译器选项),但将来可能会稳定,该特性是在#38061中添加的。s1ag04yj3#
rustc
(从版本1.45.2开始)似乎没有提供任何获取主机目标三元组的方法。作为一种变通方法,我决定使用
strace
和一个小的伪程序来欺骗编译器显示主机三元组;rustc
根据预编译库的平台三元组将预编译库存储在单独的目录中。这是我最后得到的:
它的工作原理与您所期望的一样,在64位Linux系统上使用
gnu
ABI rust安装生成x86_64-unknown-linux-gnu
。从理论上讲,这应该适用于任何版本的rustc。我可以确认它适用于rustc 1. 43. 0(随Ubuntu 18. 04一起提供)和1. 45. 2。
以下是使用此命令时需要注意的一些注意事项:
1.这个命令需要bash,因为我使用的是
<(..)
结构,这个命令可以修改为使用显式的临时文件,但代价是更加复杂。1.如果编译器试图访问主机以外平台的文件,此命令将生成多个目标三元组。这是故意的。如果这是一个问题,您可以使用基于启发式的方法,通过使用
uniq
(与--count
一起使用)、sort
和head
来选择访问次数最多的三元组。1.用于过滤三元组的正则表达式并不像我希望的那样严格。如果三元组遵循正式的规范,它可能会进一步缩小。如果我能找到一些时间,我会在稍后更新。
干杯!
tp5buhyn4#
我已经写了一个
rustc_host
板条箱,允许这样做!示例: