Pregunta

Tengo un Makefile que construye muchos archivos C con líneas de comando largas y largas y hemos limpiado la salida con reglas como:

.c${MT}.doj:

        @echo "Compiling $<";\
         $(COMPILER) $(COPTS) -c -o $@ $<

Ahora esto es genial ya que @ suprime la línea de compilación que se emite. Pero cuando recibimos un error, todo lo que obtenemos es el mensaje de error, sin línea de comando. ¿Alguien puede pensar en un & Quot; ordenado & Quot; forma de emitir la línea de comando? Todo lo que puedo pensar es hacer eco en un archivo y tener un nivel más alto para detectar el error y capturar el archivo. Hacky lo sé.

¿Fue útil?

Solución

Probado y funcionó (GNU make en Linux):

.c${MT}.doj:
     @echo "Compiling $<";\
          $(COMPILER) $(COPTS) -c -o $@ $<  \
          || echo "Error in command: $(COMPILER) $(COPTS) -c -o $@ $<" \
          && false

Otros consejos

Esta pregunta es bastante antigua, pero para aquellos de ustedes que buscan en Google, creo que lo que & # 8217; haré en esta situación es alias make a make -s (modo silencioso) en mi shell, y solo coloque el prefijo @ antes de las líneas donde se invocan echo u otros comandos de diagnóstico. Cuando quiero la salida completa de \make, anularé mi alias llamándolo como @echo.

También tenga en cuenta que en esta situación que & # 8217; tendrá que hacer lo típico y colocar el <=> en su propia línea, con los comandos de regla reales en líneas separadas y sin <=> # 8217; s.

Una solución simple sería usar un script simple abc como el siguiente:

#!/bin/bash

$@
code=$?
if (( code )); then
  echo error running $@
fi
exit $code

Entonces puede escribir abc $(COMPILER) $(COPTS) -c -o $@ $< en su Makefile. Tenga en cuenta que esto no funciona cuando tiene tuberías o redireccionamientos (ya que se aplicarán a <=> en lugar del comando que desea ejecutar).

También puede poner un código similar directamente en <=> si es preferible.

Recientemente utilicé una utilidad llamada logtext para hacer un seguimiento del resultado que se había producido durante el curso de la ejecución de un archivo bat. Compruébelo, puede que le resulte bastante útil si desea saber en qué error se produjo dónde.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top