it-swarm.com.de

Unterschied zwischen "make clean" und "make distclean"

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

Mir ist aufgefallen, dass der Großteil dieses Tutorials make distclean nach make install aufruft. Aber nur libvpx ruft nach der Installation make clean auf.

In diesem Dokument werden mit http://www.gnu.org/software/automake/manual/automake.html#Cleanmake clean alle Dateien gelöscht, die make erstellt hat und make distclean löscht alle Dateien, die ./configure erstellt hat.

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 make distclean für die nächste Installation benötigt wird, aber ich konnte nicht verstehen, warum make clean nach 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.

25
ironsand

Der nach make verwendete Parameter hängt nur von den Entwicklern ab, die die Makefile geschrieben haben. Die Dokumentation, auf die Sie später verweisen, Autotools, ist nur eine von vielen Möglichkeiten, eine Makefile zu erstellen.

Der typische Standard ist, dass make clean alle Zwischendateien entfernt, und make distclean den Baum so macht, wie er war, als er nicht geteert war (oder etwas ziemlich Nahes), einschließlich Entfernen jeglicher Ausgabe von Konfigurationsskripten. 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 clean und manchmal distclean. Übrigens müssen Sie clean/distclean nicht ausführen - ich denke, Sie haben es ausgeführt, nur um Speicherplatz zu sparen. make install kopiert normalerweise die Dateien in das Zielverzeichnis (wiederum abhängig von den Entwicklern) - normalerweise Orte wie /usr/lib oder /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.

27
EdH

Nach meinem Verständnis ist es einfach um Speicherplatz zu sparen. Nach dem Kompilieren eines Programms haben Sie viele Dateien, z. Objektdateien, die nicht mehr benötigt werden, weil 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 ffmpeg Code:

  • nach dem Klonen des Repos git 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 wir nach make distclean fast auf dem Niveau direkt nach dem Klonen: 53.188 kB
6
mpy

Warum der libvpx-Schritt make clean anstelle von make distclean verwendet

Zum Zeitpunkt des Schreibens des Handbuchs hatte libvpx keine Regel in seinem Makefilefür das Ziel distcleanname__, daher wurde stattdessen cleanverwendet.

Warum make (dist)clean nach make install eingefügt wird

make distclean/make clean wird nach jedem make install nur als Vorsichtsmaßnahme eingefügt, um Benutzern, die zurückkehren, Konfigurationsoptionen ändern und neu kompilieren (was häufiger als erwartet auftrat), einen "sauberen Plan" zu bieten.

In einer früheren Version des Kompilierungshandbuchs stieß einer dieser Benutzer ohne den vorbeugenden make distclean gelegentlich auf unerwartete Ergebnisse.

Was passiert, wenn make distclean/make clean einen Fehler ausgibt?

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 distclean zweimal ausgeführt haben, was harmlos ist.

2
llogan