我可以使用什么预定义宏来检测Clang中的目标架构?

时间:2014-05-29 13:44:00

标签: macros arm clang

我想根据目标体系结构是否为例如编写代码。 armv7,armv7s或arm64。

我不能使用sysctlbyname的原因是这会在运行时给我底层架构,但是当arm64例如模拟armv7,sysctl(貌似)仍然报告arm64。

3 个答案:

答案 0 :(得分:8)

虽然这不是问题的100%答案,但可能有用:

使用clang时,您可以使用以下方法识别32位手臂和64位手臂:

__arm__,为32位手臂和32位手臂定义。

__aarch64__,为64位手臂和64位手臂定义。

答案 1 :(得分:4)

clang --target=... -mcpu=... -E - -dM </dev/null将输出所有预定义的预处理器宏(类似gcc的工作原理)

我没有看到提供答案的单一宏,但您可以使用__ARM_ARCHdefined(__ARM_ARCH_*)的某种组合。

答案 2 :(得分:2)

__ARM_ARCH_ISA_A64是预定义的,如果它的目标是arm64,

armv7s的

__ARM_ARCH_7S__

对于armv7,

__ARM_ARCH_7A__

使用:clang -arch arm64 -E -dM - < /dev/null可以输出预处理宏。