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つのファイルのいずれかが古いか存在しない場合は、コンパイル行が実行されます。foo
foo.o
foo.o
foo.c
foo.h
foo.o
foo.o
gcc -o foo.o -c foo.c
foo.o
make foo
その後、再実行するとfoo.o
Cファイルとヘッダーよりも最新であるため、再コンパイルせずに最終実行可能ファイルへのリンクに移動します(必要にmake
応じてfoo.o
アクションは必要ないと言うことができます)。
答え2
Makefileがいくつかのソースコードを構築するときは、個々のg++
コマンドを見てください。この-o
オプションは、部分的にコンパイルされた出力が保存される場所を示します。
コンパイルするには、C ++ソースコードを確認してください。 g++への最後の呼び出しはおそらく接続ステップであり、-o
最も一般的にはバイナリファイルを引数として使用します。