2013-03-04 7 views
6

私は、コンパイルとビルドの違いについて理論的な質問があります。私は、ビルドに多くの時間を要するC++プロジェクトでプログラミングしているので、 "私はヘッダファイルを変更しました"というケースでビルドを行うように言いました。本当?ヘッダーファイルに新しい属性を追加すると、ビルドする必要がありますか?コンパイルが不十分ですか?ビルドまたはコンパイル

ありがとうございます!

+0

あなたはそれを構築する必要があります。しかし、IDEやmakeツールはビルドする必要があるobj、lib、exeをビルドするだけです。 – neohope

+0

コンパイルとビルドは同じです。基本的には、ソースコードファイルを再コンパイルし、その結果のオブジェクトファイルをリンクして新しい実行可能ファイルまたはlibを作成します。ヘッダーファイルを変更すると、このヘッダーファイルが含まれているソースファイルを再コンパイルしてリンクして、新しいビルド(実行可能ファイルまたはlib)を作成する必要があります。このような依存関係の規則はプロジェクトのmakefileになければなりません。 –

答えて

14

「ビルド」は、通常、プロセス全体、前処理、コンパイルおよびリンクを意味する曖昧な用語です。ソースの変更後にこれらのプロセスのどの部分をやり直す必要があるかは、変更された内容によって異なります。単一の.cppソースを変更しただけの場合は、再コンパイルしてオブジェクトを再度リンクするだけで十分です。 .hヘッダーを変更すると、すべてこのヘッダーを含むソースファイルを再コンパイルする必要があります。これはプロジェクト固有のヘッダーが多くのソースファイルに含まれる傾向があるため、通常は高価です。

要するに、ソースを変更した場合、その影響を受けるすべてのファイルを再コンパイルする必要があり、バイナリ全体を再リンクする必要があります。

1

ビルドは、ソースコードを実行可能ファイルに変換する完全なプロセスです.C++コンパイルとは、ソースコードからオブジェクトコードへの変換です。ビルドでは、C++コードがコンパイルされ、実行可能ファイルを構築するためのリンクフェーズを含む他のステージが必要になります。ビルドはまた、他のステップを含むこともできる。コンパイル前にソースコードファイルを前処理または生成する。ただ単に(直接、または他の経由でファイルを含む)が含まれたファイルのみがコンパイルされ、その後、すべてのオブジェクトがリンクされていること。意味し、「私はすべてのヘッダファイルを変更した」ところにあるケースでビルドを行う

"フル"ビルドでは、すべてのファイルがコンパイルされるため、コンパイルするファイル数が削減され、全体のビルド時間が短縮されます。

ヘッダーファイルを変更すると、ビルドする必要があります。コンパイルすると、実行可能ファイルの一部ではない新しいオブジェクトファイルが作成されます。

5

コンパイルは、マシンレベルのコードに高レベルコードに変換する処理である

建物の実行に高いレベルの言語を変換する処理です。コンパイルとリンクが必要です。

ヘッダファイルの変更の場合は、ヘッダファイルには、いくつかのC++のファイルに影響を与える可能性があるので、あなたはそれを

を構築する必要があり、最終的な実行可能ファイルを取得することが発生しないとして単独でコンパイルするには使用することはありません最終的には不可能なので、常に構築する必要があります。

+2

私は最後のものには同意しません - **単独でコンパイルすること** - コードが有効にコンパイル可能かどうかをチェックするためにコンパイルする必要がある - あなたのアプリケーションがまだ準備されていないためにビルドする必要はありません。 。 またはその部分は、単にexe出力のためのものではありません... –

0

コンパイルはビルドの手順の1つに過ぎません。再コンパイルが必要なときはいつでも、再構築する必要があります。

コンパイルするだけで、ソースファイルとそのインクルードされたヘッダーファイルが取得され、各ソースファイルのオブジェクトファイルが生成されます。ビルディングはまた、これらのファイルをリンクして実行可能ファイルを作成します。したがって、ソースファイルを変更する場合は、新しい実行可能ファイルをテストする場合に作成する必要があります。コンパイルするだけであなたのところに行くことができます。

0

私はあなたの質問を完全に理解しているか分かりません。

コンパイルは、ビルドプロセス(前処理、コンパイル、リンク、およびその他の場合があります)の一部に過ぎません。リンカーが実行可能ファイルにリンクするオブジェクトファイルを作成するので、コンパイルだけでは不十分です。

ソフトウェアのフルビルドを実行する必要があるかどうかという質問が本当にある場合、実装(.cpp)ファイルを変更しただけではなく、宣言(ヘッダー)あなたはそれを行う必要が最もありそうです。いずれにせよ、コンパイルするだけでなく、影響を受けるコンポーネントを完全にビルドする必要があります。

6

は、ソースコードをオブジェクトコードに変換する行為です。

リンクするは、オブジェクトコードをライブラリと結合して生の実行可能ファイルにする行為です。

は、インストーラーの作成などの他のタスクによって、コンパイルとリンクで構成されるシーケンスです。 What is the difference between compile code and executable code?

から取ら

したがって、あなただけの(再)含まれている実行可能ファイルをリンクするソースファイルよりも、(「より最近編集された」)古いオブジェクト・コードをコンパイルする必要がありますあなたのプログラムの最新の変更。実際には、これはmakeがファイルをビルドするかどうかを決定する方法です。

関連する問題