différence entre `make clean` et` make distclean`

25

J'ai installé ffmpeg à partir de sources avec l'aide de cette page. https://trac.ffmpeg.org/wiki/CentosCompilationGuide

J'ai remarqué que la plupart de ce tutoriel appelle make distcleanaprès make install. Mais seuls libvpx appelle make cleanaprès l'installation.

Selon ce document, http://www.gnu.org/software/automake/manual/automake.html#Clean make clean supprime tous les fichiers makecréés et make distcleansupprime tous les fichiers ./configurecréés.

nettoyer

Effacez de l'arborescence de construction les fichiers créés par make all.

rendre propre

Supprimez également tout ce qui est créé ./configure.

Je comprends que cela make distcleanest demandé pour la prochaine installation, mais je ne comprends pas pourquoi make cleanest appelé après l'installation.

Le ffmpeg installé fonctionne sans problème. J'ai donc posé cette question parce que je veux seulement améliorer mes connaissances sur Linux. Il serait très utile que quelqu'un me donne une explication.

fer à repasser
la source
2
Make clean est appelé après l'installation pour nettoyer. Il n'est pas nécessaire de conserver les versions compilées dans le répertoire où vous avez compilé si vous avez toujours à la fois la source (et donc pouvez les recréer) et le programme installé.
Hennes

Réponses:

27

Le paramètre utilisé après makedépend uniquement du ou des développeurs qui ont écrit le Makefile. La documentation que vous référerez plus tard, Autotools, n'est qu'une des nombreuses façons de créer un fichier Makefile.

La norme typique make cleansupprime tous les fichiers intermédiaires et make distcleanrend l'arborescence telle qu'elle était lorsqu'elle n'était pas goudronnée (ou quelque chose d'assez proche), y compris la suppression de toute sortie de script de configuration. C'est ainsi que le noyau Linux fonctionne par exemple.

En d'autres termes, cela dépend totalement des développeurs pour chacune de ces bibliothèques, et c'est pourquoi parfois c'est le cas cleanet d'autres fois distclean. Soit dit en passant, vous n'avez pas besoin d'exécuter clean/ distclean- Je suppose qu'ils vous ont exécuté juste pour économiser de l'espace disque. make installcopie généralement les fichiers dans le répertoire de destination (dépendant à nouveau des développeurs) - généralement des endroits comme /usr/libou /usr/bin(également déterminé par le script de configuration, s'il s'agit d'un système de construction Autotools)

Ces nuances sont la principale raison pour laquelle les gens utilisent des systèmes de gestion de paquets comme les paquets RPM ou Debian.

EdH
la source
Pourquoi les gens utilisent-ils des packages binaires? Et pour gagner du temps?
x-yuri
6

À ma connaissance, il s'agit simplement de sécuriser l'espace disque. Après avoir compilé un programme, vous aurez beaucoup de fichiers, par exemple des fichiers objets qui ne sont plus nécessaires, car ils sont liés entre eux dans les binaires. Tout peut être recréé en passant à nouveau du temps CPU.

Prenez cet exemple avec le ffmpegcode actuel :

  • après le clonage du gitdépôt, la source prend 53 160 kB
  • après l'exécution de la configuration, il est de 53 632 ko
  • après compilation, nous avons plus de 10 fois la valeur initiale: 673 668 kB
  • make clean réduit cela à 53 636 kB
  • et enfin après make distcleannous sommes presque au niveau juste après le clonage: 53 188 kB
mpy
la source
2

Pourquoi l'étape libvpx utilise make cleanau lieu demake distclean

Au moment de la rédaction, le guide libvpx n'avait pas de règle Makefilepour la cible distclean, il cleana donc été utilisé à la place.

Pourquoi make (dist)cleanest inclus aprèsmake install

make distclean/ make cleanest inclus après chacun make installsimplement comme mesure de précaution pour fournir une "table rase" aux utilisateurs qui reviennent en arrière, modifient les options de configuration et recompilent (ce qui s'est produit plus souvent que prévu).

Dans une version précédente du guide de compilation, sans prévention make distclean, l'un de ces utilisateurs rencontrait parfois des résultats inattendus.

Et si make distclean/ make cleandonne une erreur?

Comme ça:

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

ou ca:

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

Ignorez-le. Cela signifie simplement que vous avez probablement couru make distcleandeux fois, ce qui est inoffensif.

llogan
la source
Il convient de noter que le guide utilise désormais make distcleanpour libvpx.
Hashim