Pregunta

¿Cómo puedo formatear la salida de make ( !! cambiando sólo el archivo de proyecto qmake !! ). Mis líneas de compilación siguen creciendo, y los de una línea-advertencias / errores casi desaparecer entre ellos.

Estoy pensando en algo así como

$(CC) in.ext -o out.ext

gracias, en lo que se refiere

¿Fue útil?

Solución

En qmake, puede agregar una opción de configuración silenciosa:

CONFIG += silent

(Nota:.. Creo que es el comando Es algo similar a esto)

Lo cual debería suprimir la mayor parte de la salida, y sólo las líneas de impresión como "compilar a.o", junto con sus advertencias y errores. Creo que esto es similar a la directiva de make .SILENT. (creo que esa es la que ...)

Es posible que desee tener cuidado con esto, sin embargo, ya que suprime una gran cantidad de información que los analizadores de error les gusta usar. Por ejemplo, si está compilando con una configuración SUBDIRS, no va a imprimir cuando se cambia a los diferentes directorios.

Otros consejos

Existen diferentes enfoques. Y usted puede hacer que se puede configurar.

  • Si añadir signo @ en la parte delantera de la línea dentro de la regla, el propio comando no se imprimirá, pero su producción lo hará.
  • Si Añadir -Werror a su CFLAGS variable (usted tiene uno, no se trata de una práctica común?!), Que sin duda no se pierda ninguna advertencia - la acumulación se detendrá después de la primera.
  • Puede redirigir la salida estándar de su comando para /dev/null , dejando solo flujo de error (esto no es para su caso particular, porque gcc por lo general no produce salida, pero puede ser útil para otros comandos) .

Desafortunadamente, para qmake sólo se aplica el segundo enfoque. Añadir al archivo de proyecto:

QMAKE_CFLAGS+=-Werror
QMAKE_CXXFLAGS+=-Werror

Y los makefiles generados va a utilizar estas banderas cuando invocan compilador, por lo que la construcción se detendrá en cada advertencia.


(esta sección se moverá a otra pregunta aparece tan pronto uno).

Para hacer habitual que se puede utilizar todo - usted puede hacer que todo configurable! Aquí está el ejemplo:

trace?=short

ifeq ($(trace),short)
  suppress_echo=@
  redirect_to_null=1>/dev/null

else ifeq ($(trace),full)
  suppress_echo=
  redirect_to_null=

else ifeq ($(trace),werror)
  CFLAGS+=-Werror

else
  $(error Incorrect trace type "$(trace)"!)
endif

# Thanks to Martin York for the source of this copy-pasted code
out.ext:  $(OBJ)
    @echo $(CC) $(CFLAGS) -o out.ext $(redirect_to_null)
    $(suppress_echo)$(CC) $(CFLAGS) -o out.ext $(OBJ) $(redirect_to_null)

Por lo tanto, si se invoca make como esto:

$ make trace=full

se imprimirá todo. Si se invoca

$ make

el valor short se utiliza por defecto (nota al operador ?= en lugar de = habitual!) Y las reglas se expandirá a dicha versión

out.ext: out.o
    @echo cc  -o out.ext 1>/dev/null
    @cc  -o out.ext out.o 1>/dev/null

lo que le dará todo lo que necesita.

Tal enfoque, con la configuración, se utiliza en el código de producción. Por ejemplo, lo vi en archivos make IcedTea de Ubuntu.

Puede suprimir la copia impresa con '@' y el eco lo que quiere ver:

simple ejemplo:

out.ext:  $(OBJ)
    @echo $(CC) -o out.ext
    @$(CC) -o out.ext $(OBJ) $(OTHER_FLAGS_ETC)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top