Hay diferentes enfoques. Y puedes hacer que sean configurables.
- Si agrega
@
signo delante de la línea dentro de la regla, el propio comando no se imprimirán, pero su salida se.
- Si agrega
-Werror
a su CFLAGS
variable (usted tiene uno, ¿no es 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 a
/dev/null
, dejando solo la secuencia de error (esto no es para su caso particular, porque gcc generalmente no produce resultados pero puede ser útil para otros comandos).
Desafortunadamente, para qmake
solo 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 pasará a otra pregunta tan pronto aparezca).
Para el uso habitual, puede usarlo todo, ¡puede hacerlo todo configurable! Aquí está el ejemplo:
trace?=short
ifeq ($(trace),short)
[email protected]
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
así:
$ make trace=full
se imprimirá todo. Si se invoca
$ make
el valor short
se utiliza por defecto (nota que el operador en lugar del habitual =
?=
!) Y las reglas se expandirán 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 dará todo lo que necesitar.
Este enfoque, con configuración, se utiliza en el código de producción.Por ejemplo, lo vi en los makefiles IcedTea de Ubuntu.
impresionante. exactamente lo que necesitaba –