コマンドmakeはどのように動作しますか.[Makefile,Linux]


Makefileがこう書いてある場合:
edit : main.o kbd.o command.o display.o /
insert.o search.o files.o utils.o
cc -o edit main.o kbd.o command.o display.o /
insert.o search.o files.o utils.o

main.o : main.c defs.h
cc -c main.c
kbd.o : kbd.c defs.h command.h
cc -c kbd.c
command.o : command.c defs.h command.h
cc -c command.c
display.o : display.c defs.h buffer.h
cc -c display.c
insert.o : insert.c defs.h buffer.h
cc -c insert.c
search.o : search.c defs.h buffer.h
cc -c search.c
files.o : files.c defs.h buffer.h command.h
cc -c files.c
utils.o : utils.c defs.h
cc -c utils.c
clean :
rm edit main.o kbd.o command.o display.o /
insert.o search.o files.o utils.o


 
デフォルトでは、makeコマンドのみを入力します.では、1、makeは現在のディレクトリの下に「Makefile」または「makefile」という名前のファイルを探します.2、見つかった場合、ファイルの最初のターゲットファイル(target)を探します.上記の例では、「edit」というファイルを見つけ、このファイルを最終的なターゲットファイルとします.3、editファイルが存在しない場合、またはeditが依存する後の.oファイルのファイル修正時間はeditというファイルよりも新しいので、後で定義したコマンドを実行してeditというファイルを生成します.4、editが依存する場合.oファイルも存在しない場合、makeは現在のファイルでターゲットを探します.oファイルの依存性は,見つかったらそのルールに従って生成する.oファイル.(これはスタックのプロセスに似ています)5、もちろん、あなたのCファイルとHファイルは存在し、makeが生成します.oファイル、それから使います.oファイル生命makeの究極のタスクは、ファイルeditを実行することです.これがmake全体の依存性であり、makeは最終的に最初のターゲットファイルがコンパイルされるまで、ファイルの依存関係を次々と探します.検索中に、最後に依存するファイルが見つからないなどのエラーが発生すると、makeは直接終了し、エラーを報告しますが、定義されたコマンドのエラー、またはコンパイルが成功しない場合は、makeはまったく相手にしません.makeはファイルの依存性にかかわらず、つまり、私が依存関係を探した後も、コロンの後ろのファイルがいなければ、申し訳ありません.私は仕事をしません.上記の解析により、cleanのように、最初のターゲットファイルに直接または間接的に関連付けられていないと、後で定義されたコマンドは自動的に実行されませんが、makeが実行されることを示すことができます.すなわち、コマンド「make clean」は、再コンパイルのためにすべてのターゲットファイルを消去します.プログラミングでは、このプロジェクトがコンパイルされた場合、fileのようなソースファイルを変更します.c,では、私たちの依存性に基づいて、私たちの目標file.oは再コンパイル(すなわち、この依存関係の後に定義されたコマンド)され、file.oのファイルも最新ですのでfile.oのファイル修正時間はeditよりも新しいので、editも再リンクされます(詳細はeditターゲットファイル後に定義されたコマンドを参照).もし私たちが「command.h」を変えたら、kdb.o、command.oとfiles.oは再コンパイルされ、editは再リンクされます.