为iPhone编译时Xcode设置了什么#define
时间:2020-03-06 14:51:18 来源:igfitidea点击:
我正在编写一些半便携式代码,并希望能够检测到何时为iPhone进行编译。所以我想要像#ifdef IPHONE_SDK ...之类的东西。
大概Xcode定义了一些东西,但是我在项目属性下看不到任何东西,并且Google帮不上什么忙。
解决方案
在SDK文档的"有条件地编译源代码"下
相关定义是TARGET_OS_IPHONE(他已弃用TARGET_IPHONE_SIMULATOR),这些定义在iOS框架内的/usr/include/TargetConditionals.h中定义。在较早版本的工具链上,我们必须编写:
#include "TargetConditionals.h"
但这在当前(xCode 6 / iOS8)工具链上不再是必需的。
因此,例如,如果我们仅在为设备构建时才编译代码块,则应该执行
#if !(TARGET_OS_SIMULATOR) ... #endif
要查看所有定义的宏,请将其添加到构建配置的"其他C标志"中:
-g3 -save-temps -dD
我们会遇到一些构建错误,但是编译器会将所有定义都转储到项目根目录中的.mi文件中。我们可以使用grep查看它们,例如:
grep define main.mi
完成后,请不要忘记从构建设置中删除这些选项。