2011-09-29 8 views
5

私が始めた新しいプロジェクトでは、XCodeは実行するたびにプロジェクトのすべてのファイルをコンパイルすることにしました。 )。プロジェクトにはますます多くのファイルが存在するようになってきているため、これは時間とバッテリ寿命の両方で大きな負担となります。XCodeは、実行するたびにプロジェクト全体をコンパイルします

これに影響を与える設定を変更した可能性があります。またはそうでないかもしれません。私が見なければならないいくつかのプロジェクト設定は何ですか?

+0

解決方法を見つけましたか? – ekeren

+0

@ekerenいいえ、私はしませんでした。これがXcodeのバグだと仮定して修正されました。 – leecbaker

答えて

7

ビルドを行うたびにXcodeがソースファイルのほとんどまたはすべてを再コンパイルすると、それらのファイルはすべて変更されたヘッダーファイルに直接的または間接的に依存します。

  1. は、ソースファイルを実行し、それ自体を再帰的に下位レベルのヘッダファイルの束をインポートすることを、いくつかのトップレベルのヘッダファイル#importする傾向がある:ここを探すためにいくつかのものがありますか?依存するヘッダのツリー内のファイルが変更された場合、トップレベルのヘッダファイルをインポートする.mファイルの再コンパイルが強制されます。これらの依存関係を減らすには、下位レベルのサブモジュールのヘッダーをインポートするか、各ファイルに必要なヘッダーだけをインポートすることができます。 (注:この方法で使用するように設計されていないライブラリの中には、このアプローチを困難または不可能なものにすることがあります)。

  2. 一部のサードパーティ開発ツールと静的ライブラリでは、彼らのビルドプロセス。ソースファイルがスクリプトによって生成されたヘッダーファイルに依存している場合、スクリプトがそのヘッダーファイルを再生成するたびに再コンパイルされます。スクリプトによって生成されたコードが変更されなくても、ヘッダファイルの最終更新日が変更された場合、依存するソースファイルが再コンパイルされます。これが問題の場合は、冗長なコンパイルを排除するために巧妙なハッキングが必要になることがあります。

  3. プリコンパイル済みヘッダー(.pch)ファイルを確認して、そこにインポートされているものを確認してください。そのファイルの内容は、コンパイル時にプロジェクト内のすべての.mファイルの先頭に効果的に挿入されます。

  4. 可能な限り多くの#importステートメントを.hファイルから.mファイルに移動して依存関係を最小限に抑えてください。クラスのスーパークラスのヘッダーと、そのクラスが実装するプロトコルを.hファイルにインポートするだけで、一般的に取り除くことができます。クラスの@interfaceで使用するその他のクラス、データ型、またはプロトコルには、#importステートメントの代わりに前方宣言を使用できます。

+0

これらのどれも私が直面している問題ではありませんが、私はこのページを見つける初心者には役立つと思うので、これを受け入れられた答えとしています。 – leecbaker

7

私はこの質問が終わっヶ月で実現するが、私はずっと髪、胸が張り裂ける後のXcode 4に古いプロジェクトを移動するには、同様の問題があった、私はXcodeの4(私の場合は4.2)を持っていることを発見しましたソースファイルのフルパスのいずれかにASCII以外の文字が含まれている場合、またはソースファイルに含まれるヘッダのフルパスにビルドするたびに再コンパイルされるバグです。これには接頭辞ヘッダーが含まれます。この場合、毎回フルコンパイルがトリガーされます。私の場合、以前のプログラマーはいくつかのフォルダ名に 'ƒ'を付け加えていましたが、それらを削除すると完全に機能しました。

とにかく、私は(失敗した)Googleの回答に失敗したときにこの質問に遭遇し、解決策を共有すると考えました。

+0

"Xcodeでこの問題がXcode xxxで修正されました"を追加した場合に便利でしょう。そうでなければ、読者はこれが問題であるかどうかをチェックするのに時間がかかる設定を思いつく必要があります。 、心配してください。 –

関連する問題