1. ホーム
  2. makefile

[解決済み] make clean、make clobber、make distclean、make mrproper、make realcleanの違いは何ですか?

2022-02-10 03:10:01

質問

私はいつもmakeファイルを書くわけではありませんが、書くときはうまく書くように心がけています。 他の開発者が期待するものと一貫したインターフェイスを作ろうとすると、いつも苦労する。 私が探しているのは、一般的な make something cleaner (GNU) の make ターゲットの要約です。

よく見かけるクリーニング用のmakeターゲットにはどのようなものがありますか?

それぞれのターゲットは、通常どのような場合に使用されるのでしょうか?

各ターゲットは他のターゲットと比較してどうですか?


を使ったシステムで仕事をしたことがあります。 make clean , make clobbermake mrproper 以前は それらは着実に拡張されていきました。 make clean 一時的な整理をするだけ。 make clobber ほとんどの設定を削除し make mrproper チェックアウトしたばかりの状態に戻りそうです。 これが通常の順序なのでしょうか? すべき make mrproper は、デプロイ時に生成されたバイナリと共有ライブラリを常に削除するのですか?

いろいろ読んでみると make distclean は、配布用パッケージを作成するための準備として、物事を整理するものです。 自動生成されたバージョンタグのファイル、ファイルマニフェスト、共有ライブラリは残りますが、アーカイブしたくないような一時的なファイルは削除されるのではないでしょうか?

make realclean で見つけたとき、私はまったく新しい発見をしました。 GNU Make Goalsのマニュアルページ . と共に記載されているように distcleanclobber 似たような効果があったのでしょうね。これは歴史的な遺物なのか、それとも私が取り組んできたプロジェクト群にかなり特化したものなのか、私は一度も出会ったことがないのでしょうか。


すみません、ちょっと雑談になってしまいました。 ターゲットとターゲットを比較したQ&Aはいろいろありましたが、概要を説明したようなものはありませんでした。

どのように解決するのですか?

いろいろと調べて自分なりの答えを出そうとしています。 おおよその深刻さの順序は、こうだと思います。 mostlyclean , clean , maintainer-clean , mrproper , distclean そして最後に clobber (これは、結合された distcleanuninstall ).

きれいにする

make clean は最も基本的なレベルです。 ほとんどの生成ファイルをクリーンアップしますが、設定を記録するようなものはありません。 GNU Makeマニュアルの目標ページ の状態になります。

makeを実行すると通常作成されるファイルをすべて削除します。

さらに GNU Makeマニュアルの標準ターゲットのページ のステージがあります。

カレントディレクトリにある、プログラムをビルドすることによって通常作成されるすべてのファイルを削除します。また、他のディレクトリにあるファイルについても、このmakefileによって作成されたものであれば削除します。ただし、設定を記録しているファイルは削除しないでください。また、ビルドによって作成される可能性があるが、ディストリビューションに付属しているため、通常は作成されないファイルも保存してください。mkdir -p' で作成された親ディレクトリはどうせ存在するのですから、削除する必要はありません。

.dviファイルがディストリビューションの一部でない場合は、ここで削除してください。

ほぼクリーンにする

make mostlyclean は、私が見つけた中で唯一穏やかな形の clean で、clean と同じように動作しますが、コンパイルに長い時間がかかり、頻繁に再生成する必要がないようなファイルを残します。

は、その GNU Makeマニュアルの標準ターゲットのページ のステージがあります。

clean' と同様ですが、通常リコンパイルしたくないようなファイルの削除を控えることがあります。たとえば、GCCの'mostlyclean'ターゲットはlibgcc.aを削除しません。なぜなら、再コンパイルはほとんど必要なく、たくさんの時間がかかるからです。

make distclean

make distclean は、基本的な make clean を、多くのGNU Makeシステムで使用することができます。 これは、仮名か、少なくとも make realcleanmake clobber を使用することができます。 をすべて削除します。 make clean を実行し、設定を削除します。

Linuxシステムでは、これは一歩先を行っています make mrpropper 詳細は以下のセクションを参照してください。

この名前は、配布できるようにきれいにする(tarアーカイブの形成)ことを意味しているのか、配布したものと同じ状態に戻す(tarアーカイブを解凍した直後の状態)ことを意味しているのか、よく分かりません。

GNU Makeマニュアルのゴールのページ の状態になります。

これらのターゲットは、'clean' よりも多くのファイルを削除するように定義することができます。例えば、コンパイルの準備として通常作成する設定ファイルやリンクを、 makefile 自体がこれらのファイルを作成できない場合でも、削除することができます。

さらに GNU Makeマニュアルの標準ターゲットのページ のステージがあります。

カレントディレクトリにある(あるいはこの makefile で作成された)プログラムの設定やビルドで作成されたファイルをすべて削除します。ソースを解凍し、他のファイルを作成せずにプログラムをビルドした場合、 'make distclean' は配布物にあったファイルのみを残すはずです。しかし、'mkdir -p' で作成された親ディレクトリは、どのみち存在し得たので、削除する必要はありません。

アンインストールする

make uninstall でインストールしたソフトをアンインストールします。 make install または install-* のバリアントです。 に対する動作の一部と似ています。 make clobber を使用するシステムもありますが make uninstall のようにビルドエリアに触れないようにする必要があります。 make clobber になります。

は、その GNU Make マニュアルの標準ターゲットのページ のステージがあります。

インストールされたすべてのファイル、つまり 'install' と 'install-*' ターゲットが作成するコピーを削除します。

このルールは、コンパイルが行われるディレクトリを変更してはならず、ファイルがインストールされるディレクトリのみを変更する必要があります。

メンテナークリーンを作る

make maintainer-clean は、より一般的な make distclean . これは、設定以外のほとんどすべてを削除します。 そのため make clean .

GNU Makeマニュアルの標準ターゲットのページ のステージがあります。

この Makefile で再構築できるものはほとんどすべて削除してください。これには通常、distclean によって削除されたものすべてと、それ以上のものが含まれます。Bison が生成した C ソースファイル、タグテーブル、Info ファイルなどです。

また、特定のユーザー向けであるため、一般的に使用される対象ではないことが強調されています。

maintainer-clean' ターゲットはパッケージのメンテナが使うことを想定しており、一般ユーザが使うものではありません。

mrproper を作る

make mrproper のLinuxカーネル版と思われる。 make distclean または make clobber . バックアップファイルやパッチファイルの削除にとどまるものです。 これは make clean ターゲットが行い、設定を削除します。

この名前は、アメリカで知られているクリーニング製品からきていると思います。 ミスタークリーン と、英国ではFlashと呼ばれています(だから、この名前の製品は知らなかったのです)。 Linus Torvaldsはフィンランド系アメリカ人なので、Mr.Propperというブランド名には馴染みがあったのだろう。

その Linuxカーネルメイクファイル の状態です。

# Cleaning is done on three levels.
# make clean     Delete most generated files
#                Leave enough to build external modules
# make mrproper  Delete the current configuration, and all generated files
# make distclean Remove editor backup files, patch leftover files and the like

クラバーを作る

make clobber で言及されます。 ウィキペディアの「Clobbering」の記事 もあります。 それはまた、より厳しいと述べています make clean ソフトをアンインストールしてしまう可能性もあります。 の組み合わせの可能性があります。 make uninstallmake distclean .


メイククリーンレベルのソースは1つではありません。 時間の経過とともに進化してきたため、用語や動作に一貫性がありません。 上記は、私がこれまでにまとめた最高のものです。