Makeは、コマンドライン引数を少し簡単に処理できるシェルスクリプトのように思えます。
./make.shの代わりにmakeを実行するのが標準である理由
一般的な考え方は、make
が(合理的に)最小限の再構築をサポートすることです。つまり、プログラムのどの部分が他のどの部分に依存するかを伝えます。プログラムの一部を更新すると、onlyはそれに依存する部分を再構築します。 couldこれをシェルスクリプトで行うと、lotより多くの作業になります(すべてのファイルの最終変更日を明示的にチェックするなど)。シェルスクリプトの代替方法は、毎回すべてを再構築することです。小さなプロジェクトの場合、これは完全に合理的なアプローチですが、大きなプロジェクトの場合、完全な再構築には1時間以上かかることがあります-make
を使用すると、同じことを1、2分で簡単に達成できます...
シェルスクリプトで行うのが難しいmakeにはさまざまなことがあります...
上記と同様に、Makeは宣言型(-ish)並列プログラミング言語です。
4,000個のグラフィックファイルを変換し、4個のCPUがあるとします。 CPUを飽和させながら確実に実行する10行のシェルスクリプトを作成してみてください(ここでは寛大です)。
おそらく本当の疑問は、なぜ人々がシェルスクリプトを書くのを煩わせるのかということでしょう。
Makeは、ソースファイルに変更を加えたときに、必要なファイルのみが再コンパイルされるようにします。
例えば:
final : 1.o 2.o
gcc -o final 1.o 2.o
1.o : 1.c 2.h
gcc -c 1.c
2.o : 2.c 2.h
gcc -c 2.c
ファイルを変更した場合2.h
のみ&make
を実行し、3つのコマンドすべてを逆の順序で実行します。
ファイルを変更した場合1.c
のみ&make
を実行します。最初の2つのコマンドを逆順でのみ実行します。
独自のシェルスクリプトでそれを達成しようとすると、多くのif/else
チェック。
makeは依存関係を処理します:makefileはそれらを記述します:バイナリはオブジェクトファイルに依存し、各オブジェクトファイルはソースファイルとヘッダーに依存します... 。
Makefileに記述されているすべてをビルドするのではなく、1つのターゲットを直接呼び出すことができます。
さらに、make構文は置換、vpathを提供します
これらはすべて、シェルスクリプトで記述できます。これにより、既に持っています。