コンパイルとビルドの違いについて理論的な質問があります。ビルドに時間がかかる C++ プロジェクトでプログラミングしているので、「ヘッダー ファイルを変更した」場合にのみビルドするように指示しました。本当?ヘッダー ファイルに新しい属性を追加する場合、ビルドする必要がありますか? コンパイルが足りない?
ありがとう!
コンパイルとビルドの違いについて理論的な質問があります。ビルドに時間がかかる C++ プロジェクトでプログラミングしているので、「ヘッダー ファイルを変更した」場合にのみビルドするように指示しました。本当?ヘッダー ファイルに新しい属性を追加する場合、ビルドする必要がありますか? コンパイルが足りない?
ありがとう!
「ビルド」はあいまいな用語で、通常はプロセス全体、前処理、コンパイル、およびリンクを意味します。ソースの変更後にこれらのプロセスのどの部分をやり直す必要があるかは、何が変更されたかによって異なります。ソースを1 つだけ変更した場合は.cpp
、それを再コンパイルしてオブジェクトを再度リンクするだけで十分です。.h
ヘッダーを変更すると、このヘッダーを含むすべてのソース ファイルを再コンパイルする必要があります。これは、プロジェクト固有のヘッダーが多くのソース ファイルに含まれる傾向があるため、通常はコストがかかります。
つまり、ソースに変更を加えた場合、これによって影響を受けるすべてのファイルを再コンパイルし、バイナリ全体を再リンクする必要があります。
コンパイルは、ソース コードをオブジェクト コードに変換する行為です。
リンクとは、オブジェクト コードをライブラリと組み合わせて生の実行可能ファイルにする行為です。
ビルドは、コンパイルとリンクから構成されるシーケンスであり、インストーラーの作成などの他のタスクも含まれる場合があります。
したがって、プログラムの最新の変更を含む実行可能ファイルをリンクするには、ソース ファイルよりも古い (「最近編集された」) オブジェクト コードを (再) コンパイルするだけで済みます。実際、これはmake
ファイルを構築するかどうかを決定する方法です。
コンパイルは、高水準コードをマシンレベルのコードに変換するプロセスです。
構築は、高級言語を実行可能ファイルに変換するプロセスです。これには、コンパイルとリンクが含まれます。
ヘッダーファイルを変更した場合、ヘッダーファイルはいくつかのc ++ファイルに影響を与える可能性があるため、最終的な実行可能ファイルを取得するには、ヘッダーファイルをビルドする必要があります。
最終的な言い訳ができないため、コンパイルだけでは意味がありません。したがって、常にビルドする必要があります。
ビルドはソースコードを実行可能ファイルに変換する完全なプロセスです。C++コンパイルはソースコードをオブジェクトコードに変換することです。ビルドでは、C ++コードがコンパイルされ、実行可能ファイルを構築するためのリンクフェーズを含む他のステージが必要になります。ビルドには、コンパイル前の前処理やソースコードファイルの生成など、他の手順も含まれる場合があります。
「ヘッダーファイルを変更した」場合にのみビルドを実行するということは、(直接または他のインクルードファイルを介して)インクルードするファイルのみがコンパイルされ、すべてのオブジェクトがリンクされることを意味します。「フル」ビルドでは、すべてのファイルがコンパイルされるため、コンパイルするファイルの数が減り、全体的なビルド時間が短縮されます。
ヘッダーファイルを変更する場合は、ビルドする必要があります。コンパイルすると、実行可能ファイルの一部ではない新しいオブジェクトファイルが作成されます。
コンパイルは、構築のステップの1つにすぎません。再コンパイルが必要なときはいつでも、再構築する必要があります。
コンパイルでは、ソースファイルとそれに含まれるヘッダーファイルを取得し、ソースファイルごとにオブジェクトファイルを生成します。ビルドでは、これらのファイルをリンクして実行可能ファイルを作成します。したがって、ソースファイルを変更する場合、新しい実行可能ファイルをテストする場合はビルドする必要があります。コンパイルすると、途中まで到達できます。
私はあなたの質問を完全に理解したかどうか確信が持てません.
コンパイルは、ビルド プロセスの一部にすぎません (前処理、コンパイル、リンク、およびその他のプロセスで構成されます)。リンカーが実行可能ファイルにリンクするオブジェクト ファイルを作成するため、コンパイルだけでは十分ではありません。
ソフトウェアのフル ビルドを実行する必要があるかどうかが問題である場合、実装 (.cpp) ファイルのみを変更した場合は必要ない場合もありますが、宣言 (ヘッダーなど) も変更した場合は、ほとんどの場合、それを行う必要があります。いずれにせよ、影響を受けるコンポーネントをコンパイルするだけでなく、完全にビルドする必要があります。