ある日、システム管理者の先生から、「make」の使い方を学ぶべきだと言われました。「make」は、単にコンパイルをトリガーするだけの他の多くのことに使用できるからです。
それについてこれ以上話す機会はありませんでした。良い例はありますか?
おまけとして、このツールは非推奨ではありませんか?また、最新の代替手段 (コンパイル目的など) は何ですか?
ある日、システム管理者の先生から、「make」の使い方を学ぶべきだと言われました。「make」は、単にコンパイルをトリガーするだけの他の多くのことに使用できるからです。
それについてこれ以上話す機会はありませんでした。良い例はありますか?
おまけとして、このツールは非推奨ではありませんか?また、最新の代替手段 (コンパイル目的など) は何ですか?
コンパイル以外に make を使用できる優れたものの 1 つは、LaTeX です。LaTeX を本格的に使用している場合は、BibTex や目次を使用するときに .tex ファイルを何度も再解釈する必要があるため、make が非常に便利であることに気付くでしょう。
Makeは間違いなく非推奨ではありません。同じことを行うにはさまざまな方法がありますが (Windows ではバッチ ファイル、Linux ではシェル スクリプト)、最も効果的なのは私見です。
このツールは非推奨ではありませんか
何?!いいえ、わずかでもありません。私は Linux を使っているので、普通の人ではないことはわかっていますが、ほぼ毎日使用しています。毎日それを使用している何千人もの Linux 開発者がいると確信しています。
Make を使用して、実行したい任意のコマンドを実行できます。依存関係のチェックが必要なアクティビティに使用するのが最適ですが、電子メールのチェック、サーバーの再起動、バックアップの作成などに make を使用できない理由はありません。
Ant、NAnt、および msbuild がおそらく最新の代替手段ですが、Java または .NET を使用しない環境では、plain-old-make が依然として広く使用されています。
Make はトポロジカル ソートを実行します、つまり、たくさんのものと、あるものが別のものの前にあるという一連の要件が与えられた場合、すべての要件が満たされるようにすべてのものを順序付ける方法を見つけます。もの (プログラム、ドキュメント、配布 tarball など) を構築することは、トポロジカル ソートの一般的な用途の 1 つですが、他にも用途があります。サーバー間の依存関係 (NFS、NIS、DNS など) を含む、データ センター内のすべてのサーバーに対して 1 つのエントリを持つ Makefile を作成できます。make は、停電後にコンピューターの電源を入れる順序を教えてくれます。停電前に電源を切る順番。これを使用して、単一のサーバーでサービスを開始する順序を把握できます。朝、服を着る順番を考えるのに使えます。
数年前にSlashdotに関する記事で、make を使用して Linux のブート シーケンスを最適化する手法について説明していたのを覚えています。
編集:
この原理を説明するIBM の記事を次に示します。
私が今まで見た中で最もランダムな使用法は、BCCDの init スクリプトの bash の代わりに使用されている makeです。wtfの瞬間を乗り越えると、実際にはうまく機能しました....
make は、機能が追加されたシェル スクリプトと考えてください。
UNIX ツールの「make」は、たとえ .Net の世界では衰退しつつあるとしても、まだ多く使用されていることは確かです。最近では、MSBUILD、Ant、nAnt などのツールを使用する人が増えているかもしれませんが、それらは基本的に、別のファイル構文で "make" するだけです。基本的なコンセプトは同じです。
Make ツールは、出力ファイルに処理される入力ファイルがある場合に便利です。レポートを MSWord で作成し、PDF として配布しますか? -- make を使用して PDF を生成します。
必要に応じて、crontab を使用して構成ファイルを変更します。
postfix
マップとsquid
外部テーブルの例があります。
/etc/postfix/Makefile の例:
POSTMAP=/usr/sbin/postmap
POSTFIX=/usr/sbin/postfix
HASHES=transport access virtual canonical relocated annoying_senders
BTREES=clients_welcome
HASHES_DB=${HASHES:=.db}
BTREES_DB=${BTREES:=.db}
all: ${BTREES_DB} ${HASHES_DB} aliases.db
echo \= Done
${HASHES_DB}: %.db: %
echo . Rebuilding $< hash...
${POSTMAP} $<
${BTREES_DB}: %.db: %
echo . Rebuilding $< btree...
${POSTMAP} $<
aliases.db: aliases
echo . Rebuilding aliases...
/usr/bin/newaliases
等