make: Terminal Output

 
 13.2 Synchronized Terminal Output
 =================================
 
 Normally GNU 'make' will invoke all commands with access to the same
 standard and error outputs that 'make' itself was started with.  A
 number of tools will detect whether the output is a terminal or
 not-a-terminal, and use this information to change the output style.
 For example if the output goes to a terminal the tool may add control
 characters that set color, or even change the location of the cursor.
 If the output is not going to a terminal then these special control
 characters are not emitted so that they don't corrupt log files, etc.
 
    The '--output-sync' (SeeOutput During Parallel Output Parallel
 Output.) option will defeat the terminal detection.  When output
 synchronization is enabled GNU 'make' arranges for all command output to
 be written to a file, so that its output can be written as a block
 without interference from other commands.  This means that all tools
 invoked by 'make' will believe that their output is not going to be
 displayed on a terminal, even when it will be (because 'make' will
 display it there after the command is completed).
 
    In order to facilitate tools which would like to determine whether or
 not their output will be displayed on a terminal, GNU 'make' will set
 the 'MAKE_TERMOUT' and 'MAKE_TERMERR' environment variables before
 invoking any commands.  Tools which would like to determine whether
 standard or error output (respectively) will be displayed on a terminal
 can check these environment variables to determine if they exist and
 contain a non-empty value.  If so the tool can assume that the output
 will (eventually) be displayed on a terminal.  If the variables are not
 set or have an empty value, then the tool should fall back to its normal
 methods of detecting whether output is going to a terminal or not.
 
    The content of the variables can be parsed to determine the type of
 terminal which will be used to display the output.
 
    Similarly, environments which invoke 'make' and would like to capture
 the output and eventually display it on a terminal (or some display
 which can interpret terminal control characters) can set these variables
 before invoking 'make'.  GNU 'make' will not modify these environment
 variables if they already exist when it starts.