diferencia entre `make clean` y` make distclean`

25

Instalé ffmpeg desde las fuentes con ayuda de esta página. https://trac.ffmpeg.org/wiki/CentosCompilationGuide

Noté que la mayoría de este tutorial llama make distcleandespués make install. Pero solo libvpx llama make cleandespués de la instalación.

Según este documento, http://www.gnu.org/software/automake/manual/automake.html#Clean make clean elimina todos los archivos que se makecrearon y make distcleanelimina todos los archivos que se ./configurecrearon.

hacer limpia

Borre del árbol de compilación los archivos creados por make all.

hacer distclean

Además borre cualquier cosa ./configure creado.

Entiendo que make distcleanse requiere para la próxima instalación, pero no podía entender por qué make cleanse llama después de la instalación.

El ffmpeg instalado funciona sin problemas. Entonces hice esta pregunta porque solo quiero mejorar mi conocimiento sobre Linux. Sería muy útil que alguien me diera una explicación.

hierro y
fuente
2
Hacer limpieza se llama después de la instalación para limpiar. No es necesario mantener versiones compiladas en el directorio donde compiló si aún tiene la fuente (y, por lo tanto, puede recrearlas) y el programa instalado.
Hennes

Respuestas:

27

El parámetro utilizado después makesolo depende de los desarrolladores que escribieron el Makefile. La documentación a la que hace referencia más adelante, Autotools, es solo una de las muchas formas de crear un Makefile.

El estándar típico es make cleaneliminar todos los archivos intermedios, y make distcleanhace que el árbol esté como estaba cuando no estaba alquilado (o algo bastante parecido), incluida la eliminación de cualquier salida del script de configuración. Así es como funciona el kernel de Linux, por ejemplo.

En otras palabras, depende totalmente de los desarrolladores para cada una de esas bibliotecas, y es por eso que a veces es así cleany otras veces lo es distclean. Por cierto, no necesita ejecutar clean/ distclean- Supongo que tienen que ejecutarlo solo para ahorrar espacio en disco. make installgeneralmente copia los archivos en el directorio de destino (nuevamente dependiente de los desarrolladores), generalmente coloca como /usr/libo /usr/bin(también determinado por el script de configuración, si es un sistema de compilación de Autotools)

Estos matices son la razón principal por la que las personas usan sistemas de administración de paquetes como paquetes RPM o Debian.

EdH
fuente
¿Por qué la gente usa paquetes binarios? ¿Qué hay de ahorrar tiempo?
x-yuri
6

A mi entender, es simplemente para ahorrar espacio en disco. Después de compilar algún programa, tendrá una gran cantidad de archivos, por ejemplo, archivos de objetos que ya no son necesarios, ya que están vinculados entre sí en los archivos binarios. Todo se puede recrear gastando nuevamente algo de tiempo de CPU.

Tome este ejemplo con el ffmpegcódigo actual :

  • después de clonar el gitrepositorio, la fuente toma 53 160 kB
  • después de la ejecución de configuración son 53 632 kB
  • después de la compilación tenemos más de 10 veces el valor inicial: 673 668 kB
  • make clean reduce esto a 53 636 kB
  • y finalmente después de make distcleanque estamos casi al nivel justo después de la clonación: 53 188 kB
mpy
fuente
2

¿Por qué utiliza el paso libvpx en make cleanlugar demake distclean

Al momento de escribir la guía, libvpx no tenía ninguna regla Makefilepara el objetivo distclean, por lo que cleanse utilizó en su lugar.

¿Por qué make (dist)cleanse incluye despuésmake install

make distclean/ make cleanse incluye después de cada uno make installsimplemente como medida de precaución para proporcionar una "lista limpia" para los usuarios que regresan, cambian las opciones de configuración y vuelven a compilar (lo que ocurre con más frecuencia de lo esperado).

En una versión anterior de la guía de compilación, sin el preventivo make distclean, uno de estos usuarios en ocasiones encontraría resultados inesperados.

¿Qué pasa si make distclean/ make cleanda un error?

Me gusta esto:

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

o esto:

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

Ignoralo. Simplemente significa que probablemente corriste make distcleandos veces, lo que es inofensivo.

lema
fuente
Vale la pena señalar que la guía ahora usa make distcleanpara libvpx.
Hashim