私は現在、自分のプロジェクトのコンパイル時間を最適化しようとしています。私はいつもモジュール全体の最適化のようなものがあることを知っていましたが、ビルドの設定でそれをチェックするのではなく、実際に深く掘り下げていませんでした。私はそれを理解したようユーザー定義のSWIFT_WHOLE_MODULE_OPTIMIZATIONとSwift最適化レベルの違いは何ですか?
:
WMOは速く実行されるコードを生じるはずであるが、代わりに並行して個別に各ファイルをコンパイルするの1つの全体としてモジュール全体のファイルをコンパイルするために、わずかに、コンパイル時間を増やすことができます。 https://swift.org/blog/whole-module-optimizations/
だから、スウィフト最適化レベルを設定することをお勧めします:それは最高のコンパイルを持っていることは重要ではありませんよう Fast, Whole Module Optimization [-O -whole-module-optimization]
に設定コンフィギュレーションをリリースためNone [-Onone]
- を時折のリリースビルドの時間
しかし、その後のデバッグコンフィギュレーションのコンパイル時間を減少させるためのいくつかのヒントを研究するとき、私はこのユーザー定義設定が見つかりました:
SWIFT_WHOLE_MODULE_OPTIMIZATION = YES
(リリース用)SWIFT_WHOLE_MODULE_OPTIMIZATION = NO
(デバッグ用)この設定はで、私のDEBUGコンパイル時間はほぼ半分になりましたしかし、それも私を混乱させます。 この設定とその設定の元になったドキュメントは見つかりませんでした。 は(SWIFTコンパイラの私の理解では、非常に基本的である、と私は前にユーザー定義の設定では動作しませんでした)
みんなはただの理由を説明、またはではないだろう説明もなく、コンパイル時間を短縮するためにそれを推奨しています上記のSwift Optimization Levelとの競合。
私が理解しているように、この設定をYESに設定すると、wmoを有効にするためのコンパイル時間が長くなるはずです。 したがって私はwmo、またはこの特定の設定の私の理解が間違っていると思います。
だから、私の質問は以下のとおりです。
Swift Optimization Level
設定とSWIFT_WHOLE_MODULE_OPTIMIZATION
の違いは何ですか?なぜ
SWIFT_WHOLE_MODULE_OPTIMIZATION
がコンパイル時間を短縮しますか?
ありがとうございます!
ありがとうございました!私はそれを得るか分からないので、私と一緒に耐えてください。 一般的にwmoはコンパイル時間を短縮しますが、 - Swift Optimization Levelですべてのファイルに対して有効にすると、ビルドごとにすべてのファイルがコンパイルされるので、それは悪いオプションと考えられます。しかし、それは解放のために大丈夫です。 - 'SWIFT_WHOLE_MODULE_OPTIMIZATION'でそれを有効にし、それを各ファイルに対して無効にすると、変更されたファイルだけがコンパイルされるため、より高速です。 これが正しいですか? – CatDamon
'-wmo'は* module *オプションです。これを有効にすると、コンパイラにすべてのファイルに対するグローバルビジョンが与えられ、プロジェクト全体が1つにコンパイルされます。これにより、コンパイラーは各ファイルで何が変更されたのか、それがどのように他のファイルに影響を与え、必要なものをコンパイルするための決定を最適化するのかを知るため、時間が短縮されます。 * Swift Optimization Level *は、 '-wmo'オプションが有効かどうかにかかわらず、各ファイルの処理方法を示すフラグです。 ** TL; DR **、はい、あなたは正しい – jvrmed