run phony makefile

phony - makefile windows



¿Qué significa*.o/.Suffixes en Makefile Media? (5)

He visto comandos como este en todos los Makefiles, que no entiendo muy bien:

vpath.o: make.h config.h getopt.h gettext.h dep.h

y

.SUFFIXES: .SUFFIXES: .f .o # # %------------------% # | Default command. | # %------------------% # .DEFAULT: @$(ECHO) "Unknown target $@, try: make help" # # %-------------------------------------------% # | Command to build .o files from .f files. | # %-------------------------------------------% # .f.o: @$(ECHO) Making $@ from $< @$(FC) -c $(FFLAGS) $<

¿Qué significa el *.o y *.suffixes ?

Nota: Los dos comandos son de diferentes partes de la secuencia de comandos.


Como ya se mencionó la línea
.SUFFIXES:
Borrar todos los sufijos conocidos. Esto se hace para que el:

  • los sufijos por defecto no interferirían con sus sufijos especiales.
  • Diferentes programas de make tienen listas de sufijos incompatibles y reglas implícitas, y esto a veces crea confusión o mal comportamiento Convenciones generales para Makefiles

Si está utilizando GNU, es mejor utilizar reglas de patrón en lugar de reglas de sufijo, ya que existen (reglas de sufijo) por razones de compatibilidad. Además, las reglas de sufijo no pueden tener requisitos previos propios.

Entonces reescribirías la regla de sufijo de la forma:

.fo:
...

Como regla patrón de la forma:

%.de:
...

Tenga en cuenta que en las reglas de sufijo, el prefijo de requisito previo es primero y el sufijo de destino ocupa el segundo lugar, mientras que con las reglas de patrón es al revés (y menos confuso).

Si planea trabajar más con makefiles, también consulte el libro Managing Projects with GNU Make, que está disponible en línea.


La primera línea .SUFFIXES todo el conocimiento de los sufijos ''incorporados''; el segundo restablece los sufijos .f (tradicionalmente Fortran) y .o (archivos de objeto). La regla .DEFAULT se usa cuando no se puede usar nada más. Y la última regla compila un archivo .f en un archivo .o usando el compilador $(FC) . El medio @ no hace eco del comando, y me molesta (prefiero ver los comandos utilizados para hacer la compilación).

No puedo ver un *.suffixes en los extractos de makefile, así que no puedo decirles lo que significa.


La primera línea en su pregunta es solo una regla estándar de Makefile.

vpath.o: make.h config.h getopt.h gettext.h dep.h

Un archivo .o es un archivo objeto; es un producto intermedio entre sus archivos fuente y el binario compilado final. Contiene código compilado, pero aún no se ha vinculado en una biblioteca completa o en un binario. Esta regla simplemente dice que vpath.o depende de make.h , config.h , etc., y cada vez que se cambien, se debe volver a compilar. Los comandos necesarios para compilar vpath.o deben seguirse en las siguientes líneas, con sangría y un carácter de tabulación. (Disculpas si estoy repitiendo cosas que ya sabes; no estaba seguro de en qué parte de esa primera línea estabas confundido).

.SUFFIXES no se refiere a un sufijo de archivo real; es solo un tipo especial de regla en un makefile que se usa para configurar "reglas de sufijo".

Las reglas de sufijo son reglas de la forma .ab , como las que ves con tu regla .fo . Son una forma de indicar que cada vez que vea, digamos, un archivo .f (el archivo de origen), puede crear un archivo .o (el archivo de destino) siguiendo esa regla, donde $< indica el origen. archivo y $@ representa el archivo de destino.

El .SUFFIXES "target" es una forma de definir qué sufijos puede usar en sus reglas de sufijo. Cuando se utiliza sin requisitos previos, borra la lista incorporada de sufijos; cuando se usa con requisitos previos, los agrega a su lista de sufijos conocidos que se pueden usar en las reglas de sufijo.

En GNU make , puedes usar el % más poderoso y claro para formar reglas de patrón, como:

%.o: %.c gcc -c -o $@ $<

que es el equivalente de la regla del sufijo:

.c.o: gcc -c -o $@ $<

Consulte la documentación de GNU Make para obtener más información (pero que también menciona las extensiones de GNU), o la especificación de Unix único / POSIX para la sintaxis común y portátil.



También puede usar la cadena de la regla de sufijo, como en la siguiente para generar tex luego pdf desde un archivo gnuplot:

.SUFFIXES: .plt .tex .pdf # (notice that there should be tabs prefixing the lines after the rule) %.tex: %.plt gnuplot -e " / set format ''$$%g$$'' ; / set terminal epslatex standalone color ; / set output ''$@'' / " $< %.pdf: %.tex pdflatex $< all: test.pdf