有没有类似-mcpu =但是在gcc和clang中选择OS?或者“选择最匹配的最近目标”?

时间:2014-09-29 03:37:00

标签: gcc clang

简单问题:我知道-mcpu=xxx可用于在gcc和clang上选择目标CPU。对于目标操作系统,是否有相同的选项?像-mos=linux-mos=freebsd

之类的东西

或者,有没有办法指定不完整​​的目标三元组(例如,x86_64-*-freebsd*i686*linux*),gcc / clang会自动完成?

我问这个,因为FreeBSD和OpenBSD似乎使用特定于版本和特定于包管理器的(!)目标三元组。

感谢。

编辑/更新我已经找到了我需要的大部分内容,我唯一缺少的是:有没有办法指定要在gcc上使用的目标命令行,就像-target切换到clang?例如:gcc -someoptionhere i686-linux?或者一种方法来了解我是否应该使用multilib目标而不是目标三元组? :谢谢......

1 个答案:

答案 0 :(得分:1)

好吧,我自己想出来(底部是参考文献)。

-m实际上是指定multilib编译器的目标。

对于clang,可以使用-target选项指定目标三元组。三元组的任何部分都可以省略;将选择适当的默认值。所以我真正需要说的是[arch]-[OS][arch]-[OS]-[ABI]。版本号并不重要,请参阅LLVM源中的include / llvm / ADT / Triple.h。

不幸的是,与我原先认为的相反,gcc 的工作方式如下:gcc的每个单独构建都与给定的目标三元组相关联,而不合格的gcc通常是硬链接的给定目标三联。这意味着我不能像clang一样使用任何捷径;指定目标三元组是必需的。

所以现在我需要弄清楚如何使用gcc和clang以及相同的工具/构建脚本(不是configure,cmake或scons)来支持交叉编译。谢谢!

参考文献: