make
ソースツリー全体を再コンパイルしなくても、いつでもプロセスを中断できることがわかります。私が知っている限り、make
ターゲットはまだコンパイルされていない場合、または最後のコンパイル以降にソースコードが変更された場合にのみコンパイルされます。
しかし、私が中断すると、make
明らかに1つ以上の(並行性レベルに応じて)準備が整ったバイナリが1つ以上あります。次に私が走ったら、彼らは何をしますかmake
?または、部分的にコンパイルされたバイナリを避けるためにCtrl+を押すと、現在のターゲットは完了しますか?C
ベストアンサー1
make
簡単に言うと、各ステップが複数のファイルを入力として使用し、単一のファイルを出力として生成する(潜在的に大きな)数のステップがあると考えることができます。
ステップは、「コンパイルターゲットfile.c
」file.o
または「ld
リンクの使用main.o
」のいずれかです。中断すると、現在実行中のステップが終了し、処理中の出力ファイルが削除されます。通常、「半分準備されたバイナリ」は残りません。file.o
program
make
CtrlC
再起動すると、make
すべての入力ファイルと出力ファイルのタイムスタンプを確認して、次の手順を再実行します。
- 入力ファイルのタイムスタンプが出力ファイルよりも最新です。
- 出力ファイルが存在しません
これは、通常、ステップの実行に長い時間がかかる場合(最新のコンピューターではまれですが、大規模なプログラムのステップは設計にld
簡単に数分かかる場合があります)、停止して再開するとそのステップが最初から始まることを意味します。make
make
平均化の現実は、上記のMakefile
ものよりはるかに複雑ですが、基本原則は同じです。