我想根据目标体系结构是否为例如编写代码。 armv7,armv7s或arm64。
我不能使用sysctlbyname的原因是这会在运行时给我底层架构,但是当arm64例如模拟armv7,sysctl(貌似)仍然报告arm64。
答案 0 :(得分:8)
虽然这不是问题的100%答案,但可能有用:
使用clang时,您可以使用以下方法识别32位手臂和64位手臂:
__arm__
,为32位手臂和32位手臂定义。
__aarch64__
,为64位手臂和64位手臂定义。
答案 1 :(得分:4)
clang --target=... -mcpu=... -E - -dM </dev/null
将输出所有预定义的预处理器宏(类似gcc的工作原理)
我没有看到提供答案的单一宏,但您可以使用__ARM_ARCH
和defined(__ARM_ARCH_*)
的某种组合。
答案 2 :(得分:2)
__ARM_ARCH_ISA_A64
是预定义的,如果它的目标是arm64,
__ARM_ARCH_7S__
,
__ARM_ARCH_7A__
。
使用:clang -arch arm64 -E -dM - < /dev/null
可以输出预处理宏。