2010-11-03 84 views
1

我在XCode中有一个Objective C项目。构建时,XCode预编译我的前缀PCH文件两次。第一次,它使用参数-x objective-c-header,它工作正常。第二次,它使用-x c-header,并且失败(由于包含Objective C代码的文件)。XCode预编译两次;第二次用错误的语言

我有另一个设置相同的项目,但它建立良好。 (PCH只用一次Objective C预编译。)我并排比较了两个项目的构建设置,没有任何相关的不同。我并肩比较了目标的构建设置,并且没有相关的区别。

我试图清理所有目标和重建,但没有运气。我尝试重新启动XCode,但没有运气。我为我的项目文件夹grepped c-header,但它只出现在构建日志中。

这可能是什么原因造成的?

回答

3

我讨厌回答我自己的问题,但我想通了。我禁用了预编译前缀头部以查看这是否会让我继续工作。构建仍然失败,出现同样的错误,但从.c文件包含文件失败时,我忘了我已经在项目中。显然,这个.c文件的存在是这个项目和其他项目之间的区别。现在,我知道发生了什么,我将代码移到了#ifdef __OBJC__之内,一切看起来都很好。

7

PCH文件正在多次重建,因为项目中有多种语言;一次使用objective-c编译器,一次使用直接的C文件,因此,您在Objective-C代码之外使用了#ifdef,并导致直接的C编译器惊醒了它的午餐。

如果你有一个C++文件,你最终可能会得到3个PCH编译(IIRC - 我已经有一段时间了)。

+0

+1为“喧闹它的午餐”..和一个很好的解释:) – WrightsCS 2014-01-24 02:05:58