XCode PCHを2回プレイティングします。間違った言語で2回目
-
28-09-2019 - |
質問
Xcodeには客観的なCプロジェクトがあります。構築するとき、Xcodeは私のプレフィックスPCHファイルを2回プリコンパイルします。初めて、それは議論を使用します -x objective-c-header
, 、そしてそれは正常に動作します。二度目に、それは使用します -x c-header
, 、およびそれは失敗します(客観的なCコードを含むファイルのため)。
私は同じものをセットアップする別のプロジェクトを持っていますが、それは正常に構築されます。 (PCHは、目的Cで1回だけ事前縮小されます。)2つのプロジェクトのビルド設定を並べて比較しましたが、関連するものはありませんでした。ターゲットのビルド設定を並べて比較しましたが、再び関連する違いはありませんでした。
私はすべてのターゲットと再建をクリーニングしようとしましたが、運はありませんでした。 Xcodeを再起動してみましたが、運はありませんでした。プロジェクトフォルダーをグレップしました c-header
, 、しかし、それはビルドログにのみ表示されました。
何がこれを引き起こしているのでしょうか?
解決 2
私は自分の質問に答えるのが嫌いですが、それを理解しました。プレフィックスヘッダーのプレシャルを無効にして、それが動作を続けることができるかどうかを確認しました。ビルドは同じエラーで依然として失敗しましたが、プロジェクトに忘れていた.cファイルからファイルを含めると失敗しました。どうやら、この.cファイルの存在は、このプロジェクトと他のプロジェクトの違いです。何が起こっているのかがわかったので、コードを内部に移動しました #ifdef __OBJC__
, 、そしてすべてが順調に思えます。
他のヒント
PCHファイルは、プロジェクトに複数の言語があるため、複数回再建されています。 Objective-Cコンパイラを使用して、ストレートCファイルを使用して、したがって、Objective-Cコードがありました。 objc #ifdefとそれにより、ストレートCコンパイラが昼食をとりました。
C ++ファイルを持っている場合、おそらく3つのPCHコンピレーションになってしまうでしょう(IIRC-私がそれをマックしてからしばらく経ちました)。