tutorial make ejecutar crear con compilar como comando archivo makefile

ejecutar - makefile ejecuta otro objetivo



makefile ejecutar (3)

Tengo un archivo MAKE estructurado de la siguiente manera:

all : compile executable clean : rm -f *.o $(EXEC)

Me di cuenta de que constantemente ejecutaba "make clean" seguido de "clear" en mi terminal antes de ejecutar "make all". Me gusta tener un terminal limpio antes de intentar examinar los desagradables errores de compilación de C ++. Así que traté de agregar un tercer objetivo:

fresh : rm -f *.o $(EXEC) clear make all

Esto funciona, sin embargo, esto ejecuta una segunda instancia de make (creo). ¿Hay una manera correcta de obtener la misma funcionalidad sin ejecutar una segunda instancia de make?


En la línea de comandos de Linux: borrar y hacer


En realidad tienes razón: ejecuta otra instancia de make. Una posible solución sería:

.PHONY : clearscr fresh clean all all : compile executable clean : rm -f *.o $(EXEC) fresh : clean clearscr all clearscr: clear

Al llamar a make fresh obtienes primero el objetivo clean , luego la clearscreen clear que corre clear y finalmente all que hace el trabajo.

EDITAR

¿Qué sucede en el caso de compilaciones paralelas con la opción make -j ? Hay una forma de arreglar el orden. Del manual de la marca, sección 4.2:

Ocasionalmente, sin embargo, tiene una situación en la que desea imponer un orden específico sobre las reglas que se invocarán sin forzar la actualización del objetivo si se ejecuta una de esas reglas. En ese caso, quiere definir prerrequisitos de solo pedido. Los requisitos previos de solo pedido se pueden especificar colocando un símbolo de tubería (|) en la lista de requisitos previos: los requisitos previos a la izquierda del símbolo de tubería son normales; cualquier prerrequisito a la derecha es solo de orden: objetivos: requisitos previos normales | pedidos-solo-prerrequisitos

La sección de requisitos previos normales, por supuesto, puede estar vacía. Además, aún puede declarar varias líneas de requisitos previos para el mismo objetivo: se anexan de manera apropiada. Tenga en cuenta que si declara que el mismo archivo es un prerrequisito normal y solo de orden, el prerrequisito normal tiene prioridad (ya que son un superconjunto estricto del comportamiento de un requisito previo solo de orden).

Por lo tanto, el archivo MAKE se convierte

.PHONY : clearscr fresh clean all all : compile executable clean : rm -f *.o $(EXEC) fresh : | clean clearscr all clearscr: clear


Si eliminó la línea make all de su objetivo "nuevo":

fresh : rm -f *.o $(EXEC) clear

Simplemente podría ejecutar el comando make fresh all , que se ejecutará como make fresh; make all make fresh; make all .

Algunos podrían considerar esto como una segunda instancia de make, pero ciertamente no es una sub-instancia de make (una marca dentro de una marca), que es lo que su intento parece dar como resultado.