Unterschied zwischen "make clean" und "make distclean"

25

Ich habe ffmpeg aus Quellen mit Hilfe dieser Seite installiert. https://trac.ffmpeg.org/wiki/CentosCompilationGuide

Ich bemerkte , dass die meisten von diesen Tutorial Anrufen make distcleannach make install. Aber nur libvpx ruft make cleannach der Installation auf.

Gemäß diesem Dokument löscht http://www.gnu.org/software/automake/manual/automake.html#Clean make clean alle erstellten Dateien makeund make distcleanlöscht alle erstellten Dateien ./configure.

sauber machen

Löschen Sie aus dem Build-Baum die von make all erstellten Dateien.

distclean machen

Löschen Sie zusätzlich alle erstellten ./configure.

Ich verstehe, dass dies make distcleanfür die nächste Installation erforderlich ist, konnte jedoch nicht nachvollziehen, warum make cleannach der Installation aufgerufen wird.

Das installierte ffmpeg funktioniert problemlos. Deshalb habe ich diese Frage gestellt, weil ich nur mein Wissen über Linux verbessern möchte. Es wäre sehr hilfreich, wenn mir jemand eine Erklärung dafür geben würde.

Eisen und Sand
quelle
2
Make clean wird nach der Installation aufgerufen, um aufzuräumen. Es ist nicht erforderlich, kompilierte Versionen in dem Verzeichnis zu belassen, in dem Sie kompiliert haben, wenn Sie immer noch sowohl die Quelle als auch das installierte Programm haben (und diese somit neu erstellen können).
Hennes

Antworten:

27

Der Parameter, der danach verwendet wird, makehängt nur von den Entwicklern ab, die das geschrieben haben Makefile. Die Dokumentation, auf die Sie später verweisen, Autotools, ist nur eine von vielen Möglichkeiten zum Erstellen eines Makefile.

Der typische Standard ist make clean, alle Zwischendateien zu entfernen und make distcleanden Baum so zu machen, wie er war, als er nicht geteert war (oder etwas ziemlich Nahes). So funktioniert beispielsweise der Linux-Kernel.

Mit anderen Worten, es ist völlig abhängig von den Entwicklern für jede dieser Bibliotheken, und deshalb ist es manchmal cleanund manchmal distclean. Übrigens müssen Sie nicht clean/ distclean- ich denke, Sie haben es nur ausgeführt, um Speicherplatz zu sparen. make installkopiert normalerweise die Dateien in das Zielverzeichnis (wiederum abhängig von den Entwicklern) - normalerweise Orte wie /usr/liboder /usr/bin(wird auch vom configure-Skript bestimmt, wenn es sich um ein Autotools-Build-System handelt)

Diese Nuancen sind der Hauptgrund, warum Leute Paketverwaltungssysteme wie RPM- oder Debian-Pakete verwenden.

EdH
quelle
Hauptgrund für die Verwendung von Binärpaketen? Was ist, um Zeit zu sparen?
X-Yuri
6

Nach meinem Verständnis ist es einfach um Speicherplatz zu sparen. Nach dem Kompilieren eines Programms haben Sie viele Dateien, z. B. Objektdateien, die nicht mehr benötigt werden, da sie in den Binärdateien miteinander verknüpft sind. Alles kann durch erneutes Aufwenden von CPU-Zeit neu erstellt werden.

Nehmen Sie dieses Beispiel mit dem aktuellen ffmpegCode:

  • Nach dem Klonen des gitRepos benötigt die Quelle 53.160 kB
  • nach dem configure-lauf sind es 53.632 kB
  • Nach der Kompilierung haben wir mehr als das 10-fache des ursprünglichen Wertes: 673 668 kB
  • make clean reduziert dies auf 53.636 kB
  • und schließlich sind make distcleanwir fast auf dem Niveau direkt nach dem Klonen: 53.188 kB
mpy
quelle
2

Warum der libvpx-Schritt make cleananstelle von verwendetmake distclean

Zum Zeitpunkt des Schreibens hatte der Leitfaden libvpx keine Regel Makefilefür das Ziel distcleanund cleanwurde stattdessen verwendet.

Warum make (dist)cleanist nach enthaltenmake install

make distclean/ make cleanwird nacheinander make installnur als Vorsichtsmaßnahme eingefügt, um Benutzern, die zurückkehren, Konfigurationsoptionen ändern und neu kompilieren (was häufiger vorkam als erwartet), eine "saubere Sache" zu bieten.

In einer früheren Version des Kompilierungshandbuchs stieß make distcleaneiner dieser Benutzer gelegentlich ohne Vorbeugung auf unerwartete Ergebnisse.

Was ist, wenn make distclean/ make cleangibt einen Fehler?

So was:

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

oder dieses:

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

Ignoriere es. Es bedeutet nur, dass Sie wahrscheinlich make distcleanzweimal gelaufen sind, was harmlos ist.

Logan
quelle
Es ist erwähnenswert, dass der Leitfaden jetzt make distcleanfür libvpx verwendet.
Hashim