1. ホーム
  2. c++

g++のコンパイル時間を高速化する方法(テンプレートを多用する場合)

2023-11-14 08:24:29

質問

この質問はおそらく奇妙なものですが、どのようにしたら g++ のコンパイル時間を短縮できるでしょうか。私の C++ コードは、boost とテンプレートを多用しています。私はすでにヘッダーファイルから可能な限り移動し、-j オプションを使用していますが、それでもコンパイル (およびリンク) にかなりの時間がかかります。

私のコードを分析し、コンパイラのボトルネックを指摘するようなツールはあるのでしょうか?あるいは、私のコード上で実行されているコンパイラーを何らかの方法でプロファイルすることは可能でしょうか。時々、私はコンパイラー コンソールのログを見つめることにあまりにも多くの時間を費やしてしまったという印象を持つので、これは本当に素晴らしいことです。

どのように解決するのですか?

一番役に立ったこと。

  • RAM ファイルシステム上で構築する。 これは Linux では些細なことです。 一般的なヘッダーファイルのコピー (プリコンパイルまたは実際の .h ファイル) を RAM ファイルシステム上に置いておくとよいでしょう。
  • プリコンパイルされたヘッダ . 主要な)ライブラリ(Boost, Qt, stdlibなど)ごとに1つずつ持っています。
  • 可能な限り、クラスをインクルードする代わりに宣言します。 これは依存関係を減らすので、ヘッダーファイルを変更したときに再コンパイルする必要があるファイルの数を減らすことができます。
  • makeの並列化 . これは通常ケースバイケースで役に立ちますが、私の場合は -j3 をグローバルに make しています。 ただし、Makefileで依存関係のグラフが正しいことを確認しないと、問題が発生する可能性があります。
  • 使用方法 -O0 は、実行速度やコードサイズをテストしていない場合(そして、コンピュータが十分に速く、パフォーマンスへの影響(おそらく小さい)をあまり気にしない場合)には、使用します。
  • 保存するたびにコンパイルします。 これを好まない人もいますが、エラーを早期に確認することができ、バックグラウンドで実行できるため、書き終えてテストの準備ができたときに待たなければならない時間を短縮することができます。