简单问题:我知道-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目标而不是目标三元组? :谢谢......
答案 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)来支持交叉编译。谢谢!
参考文献: