Desde el GNU make documentation
La recompilación se debe hacer si el archivo de origen, o cualquiera de los archivos de cabecera nombradas como dependencias, es más reciente que el archivo de objeto, o si no existe el fichero objeto.
No está cambiando su Makefile que lo desencadena.
make clean
elimina todos los archivos de objetos que se han creado mientras tanto. Normalmente, no es gran cosa recompilar parcialmente, es decir, solo para recompilar los archivos que ha cambiado y, finalmente, vincular los archivos objeto recién creados con los archivos ya existentes. Aún así, si quiere estar absolutamente seguro, debe ejecutar make clean
antes de ejecutar make
nuevamente.
Un ejemplo donde mantener viejos archivos de objeto (es decir, nunca ejecutar make clean) puede convertirse en un problema: supongamos que tiene un archivo de objeto ya existente que está vinculado a la versión 1.0 de alguna biblioteca. Ahora actualiza su máquina y esto instalará la versión 1.1, donde algunas funciones son incompatibles con la función 1.0. Pero dado que el archivo de objeto se compiló esperando la versión anterior, el proceso de enlace fallará.
No me convence su ejemplo. Si una actualización de una biblioteca cambia su interfaz, tendrá que realizar cambios en el código de todos modos, lo que provocaría una recompilación de los objetos afectados. Entonces no hay necesidad de 'hacer limpieza' allí. – eriktous
No necesariamente: si el resto de los archivos en los que está trabajando no se basarán en esa biblioteca específica, los objetos afectados no se volverán a compilar. – emboss
Si algún objeto es incompatible con la nueva biblioteca, su origen se debe cambiar de todos modos para reflejar los cambios en la interfaz. Hacer un 'make clean' no hará que desaparezca, y los enlaces seguirán fallando. – eriktous