我在XCode中有一个Objective C项目。构建时,XCode会对我的前缀PCH文件进行两次预编译。第一次,它使用参数-x objective-c-header
,它工作正常。第二次,它使用-x c-header
,它失败了(由于包含Objective C代码的文件)。
我有另一个设置相同的项目,但它构建良好。 (PCH仅预编译一次,目标C。)我并排比较了两个项目的构建设置,没有任何相关的不同。我并排比较了目标的构建设置,并且没有相关差异。
我尝试清理所有目标并重建,但没有运气。我试过重启XCode,但没有运气。我为c-header
创建了项目文件夹,但它只显示在构建日志中。
导致这种情况的原因是什么?
答案 0 :(得分:7)
PCH文件正在重建多次,因为项目中有多种语言;一次使用objective-c编译器,一次使用直接C文件,因此您在 OBJC #ifdef之外使用了Objective-C代码,这导致直接C编译器加入它的午餐。 / p>
如果你有一个C ++文件,你最终可能会得到3个PCH编辑(IIRC - 自从我搞砸了以来已经有一段时间了。)
答案 1 :(得分:3)
我讨厌回答我自己的问题,但我明白了。我禁用了预编译前缀标头,看看是否会让我继续工作。构建仍然失败并出现相同的错误,但是当包含来自.c文件的文件时我失败了,我忘了我在项目中。显然,这个.c文件的存在是这个项目与另一个项目之间的区别。现在我知道发生了什么,我把代码移到了#ifdef __OBJC__
里面,一切都很好。