g++はコンパイルされたソースコードをどこに保存しますか?

g++はコンパイルされたソースコードをどこに保存しますか?

Makefileとg ++を使用してアプリケーションをコンパイルしましたが、Makefileを変更すると(動的リンクライブラリのパスを変更する)、g ++がアプリケーション全体を再コンパイルする必要がないことがわかりました。その時点で、アプリケーションは正常にコンパイルされなかったため、最終的に実行可能なアプリケーションを使用できませんでした。ただし、g ++はアプリケーション全体を再コンパイルしません。
この情報や編集ソースはどこに保存されますか? / tmpには何も表示されず、私のホームディレクトリやアプリケーション自体のルートディレクトリにも隠されたファイルはありません。 (たぶん私は十分に見えないかもしれません)。

ベストアンサー1

GCCは、ユーザー(またはこの場合はMakefile)が(-o出力オプションを使用して)指示する場所に生成されたコンテンツを保存します。コンパイル結果自体はキャッシュされません。

部分再コンパイルを可能にするのはMakefile自体です。これは、一連のターゲット(実行ファイル、オブジェクトファイル、おそらく他のアイテム)と、ターゲットが依存するターゲットとその依存関係からターゲットを作成するためのルールです。

make依存関係チェーンを評価し、まだ存在しないか、ターゲットよりも新しい依存関係を持つターゲットを再構築して、ビルドする必要があるすべてを確認します。

たとえば、次のような単純なMakefileがあるとします。

foo.o: foo.c foo.h
    gcc -o foo.o -c foo.c

foo: foo.o
    gcc -o foo foo.o

を呼び出すと、Makefileが何に依存しているかをmake foo見るためにMakefileを見てみましょう。それで、検索はこれがそしてに依存していることを知ります。これら2つのファイルのいずれかが古いか存在しない場合は、コンパイル行が実行されます。foofoo.ofoo.ofoo.cfoo.hfoo.ofoo.ogcc -o foo.o -c foo.cfoo.o

make fooその後、再実行するとfoo.oCファイルとヘッダーよりも最新であるため、再コンパイルせずに最終実行可能ファイルへのリンクに移動します(必要にmake応じてfoo.oアクションは必要ないと言うことができます)。

おすすめ記事