2012-04-01 12 views
61

Escribí un programa para una tarea que se supone que imprime su salida en stdout. La especificación de asignación requiere la creación de un Makefile que, cuando se invoca como make run > outputFile, debe ejecutar el programa y escribir el resultado en un archivo, que tiene una huella digital SHA1 idéntica a la especificada en la especificación.¿Suprime el eco de invocación de comando en makefile?

Mi problema es que mi makefile:

... 
run: 
    java myprogram 

también imprime el comando que se ejecuta mi programa (por ejemplo miprograma java) para el archivo de salida, por lo que mi archivo incluye esta línea adicional haciendo que la huella digital para ser incorrecto .

¿Hay alguna manera de ejecutar un comando sin la invocación del comando haciendo eco en la línea de comando?

Respuesta

110

Agregue @ al comienzo del comando para decirle a gmake que no imprima el comando que se está ejecutando. De esta manera:

run: 
    @java myprogram 

Como sugirió Oli, esta es una función de Make y no de Bash.

Por otro lado, Bash nunca hará eco de los comandos que se ejecutan a menos que le diga que lo haga explícitamente (es decir, con la opción -x).

+3

+1. Pero solo para aclarar la confusión del OP, quizás valga la pena aclarar que esta es una característica de Make, no de Bash. –

+0

@OliCharlesworth: tiene sentido, agregó que. Gracias. –

+0

¿Hay alguna manera de desactivar todos los ecos? ¿O apagarlo para una sección y volver a encenderlo más tarde? – Benubird

0

El efecto de preceder el comando con un @ se puede extender a una "sección" extendiendo el comando usando una barra inclinada invertida en la línea. Si se desea un comando falso para suprimir la salida, puede comenzar la sección con @printf "" \

+1

¿Podría darnos un ejemplo con el código? – Dennis

25

Aún más simple: make -s (modo silencioso)!

+0

Votación a favor: Esta debería ser la respuesta aceptada aquí. Rociar su Makefile con comandos '@' hace es difícil de depurar y agrega mucho desorden. – tripleee

+4

Estoy de acuerdo en que este es el camino a seguir, pero note, en la descripción del problema original, que yo no sería el que invoca hacer, mi instructor sería. Por lo tanto, tendría ningún control sobre las banderas pasadas. Necesitaba controlar la salida desde el archivo MAKE. Sin embargo, la mayoría de las soluciones prácticas en el mundo real. – noobler

Cuestiones relacionadas