gcc -dumpmachine
几乎完美,但它不支持影响目标的标志。另一方面,clang
可以:
$ gcc -dumpmachine
x86_64-unknown-linux-gnu
$ gcc -dumpmachine -m32
x86_64-unknown-linux-gnu
$ clang -dumpmachine
x86_64-unknown-linux-gnu
$ clang -dumpmachine -m32
i386-unknown-linux-gnu
gcc -dumpmachine
几乎完美,但它不支持影响目标的标志。另一方面,clang
可以:
$ gcc -dumpmachine
x86_64-unknown-linux-gnu
$ gcc -dumpmachine -m32
x86_64-unknown-linux-gnu
$ clang -dumpmachine
x86_64-unknown-linux-gnu
$ clang -dumpmachine -m32
i386-unknown-linux-gnu
-print-multiarch
很有用。根据文档,这个选项“显示目标的规范化 GNU 三元组,作为库路径中的一个组件”。$ gcc -print-multiarch
x86_64-linux-gnu
$ gcc -print-multiarch -m32
i386-linux-gnu
-m32
并不改变目标,就像-march=i486
不会将目标更改为i486-unknown-linux-gnu
一样。 - Ross Ridge-m32
结果也遵守了-march
选项,例如在适当的情况下打印i686-...
)。 - Jonathan Wakely-m32
不是“交叉编译”,它只是使用相同架构的不同指令集,被称为多库目标。 - Jonathan Wakelyclang
会这样做,但它没有;即使-march-armv7-a
会导致其目标从armv5te-...
更改为arm7-...
,-dumpmachine
的输出仍然保持不变。太糟糕了! - Tavian Barnes