大規模な C++ プロジェクトの場合、すべての cpp ファイルを g++ の 1 回の大きな呼び出しでコンパイルするか、すべてを個別にコンパイルしてから、結果またはその間の何かをリンクする方が良いですか (名前空間/モジュール/サブディレクトリのすべてのファイルを一度にコンパイルするなど)。
実際の違いは何ですか?どの方法が最速で、その理由は?
大規模な C++ プロジェクトの場合、すべての cpp ファイルを g++ の 1 回の大きな呼び出しでコンパイルするか、すべてを個別にコンパイルしてから、結果またはその間の何かをリンクする方が良いですか (名前空間/モジュール/サブディレクトリのすべてのファイルを一度にコンパイルするなど)。
実際の違いは何ですか?どの方法が最速で、その理由は?
ファイルを個別にコンパイルしてからリンクすることをお勧めします。これにより、変更があった場合に影響を受けるファイルのみを再コンパイルできるためです。したがって、最初のビルド後のビルド時間は最小限に抑えられます。
実際には、前述の理由により、ほとんどの場合、このアプローチを使用してメイクファイルが準備されます。
トリックがあります。たくさんのファイルがあるとします
file1.cpp
file2.cpp
...
fileN.cpp
次に、「master.cpp」ファイルを作成できます。
#include "file1.cpp"
#include "file2.cpp"
...
#include "fileN.cpp"
そしてそれをコンパイルします。
このようにして、個々のファイルとファイル群のビルド時間を簡単に比較できます。
UNIX を使用している場合は、「時間」を使用して gcc 呼び出しの実行時間を取得します。
そしてもちろん、ボトルネックは「収集」操作、つまりリンク段階です。ELF ファイルでこれを解決するGOLD リンカー ( wikipedia ) があります。
明らかに、マルチコアまたはマルチCPUシステムを使用している場合、複数のコンパイラプロセスを並行して起動すると、CPU使用率が向上します。ただし、プロジェクト全体の主なボトルネックは、すべてのオブジェクトファイルから実行可能ファイルを実際に作成する必要があるリンカーです。
それ以外は、プロジェクト自体に大きく依存します。ファイル間にはいくつの依存関係がありますか?最初にコンパイルする必要があるのはどれですか?ビルドシステムにそれらの決定を任せるのが最善です。