File: make.info, Node: Terminal Output, Prev: Job Slots, Up: Integrating make 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' (*note Output During Parallel Execution: 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.