La razón principal de usarlos es evitar conflictos con ficheros que tengan el mismo nombre que los target. Para entenderlo mejor, vamos a ver un ejemplo. Si escribes en el Makefile una regla con target clean para limpiar archivos temporales:
clean:la regla se ejecutará cada vez que ejecutes 'make clean' en la shell.
rm *.temp
Sin embargo, la regla anterior no se tendrá en cuenta cuando en el directorio actual haya un fichero llamado "clean", ya que en ese caso se considera que clean es un target que se encuentra "up-to-date", y por tanto ya no es necesario ejecutar el comando rm.
$ make clean
make: `clean' está actualizado.
Para resolver el problema, se declara un target .PHONY como este:
.PHONY : clean
Este target "especial" fuerza a que el comando rm sea ejecutado siempre, incluso cuando haya un fichero llamado "clean" en el directorio actual.
$ make clean
rm *.tmp
No hay comentarios:
Publicar un comentario