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 die meisten dieses Tutorials make distclean nach make install aufrufen. Aber nur libvpx ruft make clean nach der Installation auf.

Nach diesem Dokument, http://www.gnu.org/software/automake/manual/automake.html#Clean make clean löscht alle Dateien, die make erstellt haben, und make distclean löscht alle Dateien, die ./configure erstellt haben.

Machen clean

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

Make distclean

Zusätzlich alles löschen ./configure erstellt.

Ich verstehe, dass make distclean für die nächste Installation aufgerufen wird, aber ich konnte nicht verstehen, warum make clean nach der Installation aufgerufen wird.

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

 30
Author: ironsand, 2013-08-28

3 answers

Der nach make verwendete Parameter hängt nur von dem / den Entwickler ab, der / die Makefile geschrieben hat. Die Dokumentation, auf die Sie später verweisen, Autotools, ist nur eine von vielen Möglichkeiten, ein 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 wurde (oder etwas ziemlich Nahes), einschließlich des Entfernens von configure Script Ausgabe. So funktioniert zum Beispiel 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 nicht rennen clean/distclean - Ich denke, sie müssen es nur ausführen, 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 (auch bestimmt durch das Configure-Skript, wenn es sich um ein Autotools-Build-System handelt)

Diese Nuancen sind der Hauptgrund menschen verwenden Paketverwaltungssysteme wie RPM oder Debian-Pakete.

 28
Author: EdH,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-01-27 20:31:30

Nach meinem Verständnis ist es einfach, Speicherplatz zu sichern. 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. Alle können neu erstellt werden, indem Sie wieder etwas CPU-Zeit verbringen.

Nehmen Sie dieses Beispiel mit dem aktuellen ffmpeg Code:

  • nach dem Klonen des Repos git nimmt die Quelle 53 160 kB
  • nach dem Configure-Lauf sind es 53 632 kB
  • nach der Kompilierung haben wir mehr als 10 mal des Anfangswertes: 673 668 kB
  • make clean reduziert dies auf 53 636 kB
  • und schließlich nach make distclean sind wir gleich nach dem Klonen fast auf dem Niveau: 53 188 kB
 5
Author: mpy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-08-28 19:09:28

Warum der libvpx-Schritt make clean anstelle von make distclean

Zum Zeitpunkt des Schreibens des Leitfadens hatte libvpx keine Regel in seinem Makefile für das Ziel distclean, daher wurde stattdessen clean verwendet.

Warum make (dist)clean nach make install

make distclean/make clean ist nach jedem make install einfach als Vorsichtsmaßnahme enthalten, um Benutzern, die zurückkehren, Konfigurationsoptionen ändern und neu kompilieren (was häufiger als erwartet aufgetreten ist), einen "sauberen Überblick" zu geben.

In einer früheren Version des kompilieren-Anleitung, ohne die Vorbeugungs - make distclean, einer dieser Benutzer würde gelegentlich zu unerwarteten Ergebnissen.

Was ist, wenn make distclean/make clean gibt einen Fehler?

So:

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

Oder dies:

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
Author: llogan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-10-11 17:47:31