web-dev-qa-db-ja.com

「make clean」と「make distclean」の違い

このページを参考にして、ソースからffmpegをインストールしました。 https://trac.ffmpeg.org/wiki/CentosCompilationGuide

このチュートリアルのほとんどがmake distcleanの後にmake installを呼び出していることに気付きました。ただし、インストール後にlibvpxのみがmake cleanを呼び出します。

このドキュメントによると、 http://www.gnu.org/software/automake/manual/automake.html#Cleanmake cleanは、makeが作成したすべてのファイルを削除し、 make distcleanは、./configureが作成したすべてのファイルを削除します。

きれいにする

Make allでビルドされたファイルをビルドツリーから消去します。

distcleanを作る

さらに、作成された./configureをすべて消去します。

次のインストールのためにmake distcleanが呼び出されることを理解しましたが、インストール後にmake cleanが呼び出される理由を理解できませんでした。

インストールされたffmpegは問題なく動作します。 Linuxに関する知識を向上させたいだけなので、この質問をしました。誰かが私に説明してくれるととても助かります。

27
ironsand

makeの後に使用されるパラメーターは、Makefileを作成した開発者に依存します。後で参照するドキュメントAutotoolsは、Makefileを作成するための多くの方法の1つにすぎません。

典型的な標準はmake cleanはすべての中間ファイルを削除し、make distcleanは、構成スクリプトの出力の削除を含めて、ツリーがtarされていない(またはかなり近い)ときと同じ状態にします。これは、たとえばLinuxカーネルが機能する方法です。

言い換えると、それらは各ライブラリの開発者に完全に依存しており、これがcleanであったり、distcleanであったりする理由です。ちなみに、clean/distcleanを実行する必要はありません。ディスクスペースを節約するためだけに実行しているようです。 make installは通常、ファイルを宛先ディレクトリにコピーします(これも開発者に依存します)-通常/usr/libまたは/usr/bin(Autotoolsビルドシステムの場合は、configureスクリプトによっても決定されます)

これらのニュアンスが、人々がRPMやDebianパッケージなどのパッケージ管理システムを使用する主な理由です。

27
EdH

私の理解では、それは単にディスク領域を安全にすることです。いくつかのプログラムをコンパイルすると、たくさんのファイルができます。バイナリでリンクされているため、不要になったオブジェクトファイル。 CPU時間を再度費やすことで、すべてを再作成できます。

現在のffmpegコードでこの例を見てみましょう:

  • gitリポジトリのクローンを作成した後、ソースには53 160 kBが必要です
  • 構成の実行後は53 632 kBになります。
  • コンパイル後、初期値の10倍以上あります:673 668 kB
  • make cleanこれを53 636 kBに減らします
  • そして最後にmake distcleanクローン作成直後のレベルはほぼ53 188 kBです。
5
mpy

Libvpxステップが_make clean_ではなく_make distclean_を使用する理由

ガイドを書いている時点では、libvpxにはターゲットMakefiledistcleanにルールがなかったため、代わりにcleanを使用しました。

_make install_の後にmake (dist)cleanが含まれる理由

_make distclean_/_make clean_は、単に_make install_の後に含まれています。これは、戻って設定オプションを変更し、再コンパイルするユーザーに「白紙の状態」を提供するための予防策としてのみです。予想よりも頻繁に)。

以前のバージョンのコンパイルガイドでは、予防的な_make distclean_がないと、これらのユーザーの1人が予期しない結果に遭遇することがありました。

_make distclean_/_make clean_でエラーが発生した場合はどうなりますか?

このような:

_Makefile:198: Makefile: No such file or directory
make: *** No rule to make target '/tests/Makefile'.  Stop.
_

またはこれ:

_make: *** No rule to make target 'distclean'.  Stop.
_

それを無視します。これは、_make distclean_を2回実行した可能性があることを意味しますが、これは無害です。

2
llogan