为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

完成后,请不要忘记从构建设置中删除这些选项。