Rate this page

Flattr this

Suppress echoing of commands in a makefile

Tested on

Debian (Etch, Lenny, Squeeze)
Fedora (14)
Ubuntu (Hardy, Intrepid, Jaunty, Karmic, Lucid, Maverick, Natty, Trusty)

Objective

To prevent commands in a makefile from being echoed before they are executed

Background

The default behaviour of make is to echo each command to stdout before it is executed. This is usually helpful because it places error messages in context and gives an indication of progress. However there are some situations where echoing is less desirable, notably when using the echo command to print messages. In that case, allowing the command to be both echoed and executed causes the message to be printed twice.

Scenario

Suppose that a makefile contains the following rule:

foo: foo.c
        echo Building foo module
        gcc -o $@ $<

The default behaviour is to echo both commands. You wish to suppress this for the echo command but not for the mkfoo command.

Method

Prepend an at sign (‘@’) to any command that you do not want to be echoed:

foo: foo.c
        @echo Building foo module
        gcc -o $@ $<

This should have the desired effect with any POSIX-compatible implementation of make.

Further reading

The Open Group Base Specifications Issue 6, IEEE Std 1003.1, The Open Group, 2004

Tags: make