miércoles, 3 de diciembre de 2008

Makefile y target .PHONY

Hace tiempo que veo dentro de los Makefile unos target .PHONY que mas que a informática me recuerdan a los caballitos en los que siempre quería montar de pequeño. Hoy no pude resistir la curiosidad y aprendí a usar los dichosos "pony".


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:
rm *.temp

la regla se ejecutará cada vez que ejecutes 'make clean' en la shell.

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:

Visitas:

Seguidores