当前位置:  开发笔记 > IOS > 正文

在为iPhone编译时,Xcode设置了哪些#defines

如何解决《在为iPhone编译时,Xcode设置了哪些#defines》经验,为你挑选了2个好方法。

我正在编写一些半便携式代码,并希望能够检测我何时编译iPhone.所以我想要类似的东西#ifdef IPHONE_SDK....

据推测,Xcode定义了一些东西,但我在项目属性下看不到任何东西,谷歌也没什么帮助.



1> Airsource Lt..:

它位于"有条件地编译源代码"下的SDK文档中

相关定义是TARGET_OS_IPHONE(并且他弃用了TARGET_IPHONE_SIMULATOR),它们在iOS框架中的/usr/include/TargetConditionals.h中定义.在早期版本的工具链中,您必须编写:

#include "TargetConditionals.h"

但是当前(xCode 6/iOS8)工具链不再需要这个.

因此,例如,如果您只想构建一个代码块,那么您应该这样做

#if !(TARGET_OS_SIMULATOR)
...
#endif


@kritzikratzi:#ifdef错了; 你必须使用#if.(当不在模拟器上时,符号通常定义为0; #ifdef仍然为真.)
对于那些也认为TARGET_OS_IPHONE是检测设备的方式的人来说,事实并非如此.这意味着你在iOS上,可以是模拟器或iPhone.TARGET_IPHONE_SIMULATOR是检测设备与模拟器的方法.(我知道答案中没有暗示,但看到IPHONE会导致我的错误)

2> lajos..:

要查看所有已定义的宏,请将其添加到构建配置的"其他C标志"中:

-g3 -save-temps -dD

您将获得一些构建错误,但编译器会将所有定义转储到项目根目录中的.mi文件中.您可以使用grep查看它们,例如:

grep define main.mi 

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


请注意,使用LLVM编译器时这不起作用
在命令上执行此操作`gcc -dM -E -
推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有