helmet_23
helmet_23

Reputation: 405

Makefile target color output

I have written a Makefile which works fine; I do not post it entirely, just the part of it under investigation:

COMPILE_cpp = $(CXX) $(CFLAGS) -o $@ -c $< $(MAKEDEP) $(INCLUDES)

%.o : %.cpp ; $(COMPILE_cpp)
.SUFFIXES: .o .cpp

The above code does its duty. Since the build process involves many files I would like to add some color output. I have tried the following

PRINT = @echo -e "\e[1;34mBuilding $<\e[0m"

COMPILE_cpp = $(PRINT) && $(CXX) $(CFLAGS) -o $@ -c $< $(MAKEDEP) $(INCLUDES)

%.o : %.cpp ; $(COMPILE_cpp)
.SUFFIXES: .o .cpp

The Makefile still works fine but now I can only see the output of $(PRINT) with the chosen color. The command string $(CXX) $(CFLAGS) -o $@ -c $< $(MAKEDEP) $(INCLUDES) is correctly executed but not printed to screen any more; still I can see the eventual warnings and errors.

I would like to avoid using external tools (such as colorgcc or CMake) and hack it with bash script tricks.

Thanks in advance!

EDIT Just a little add: what about if I want to do something like grep the output of the current built file in order to find strings such as error or warning?

I would like to highlight them, I was thinking about calling a sed on the compiler output to change some words color...

Upvotes: 2

Views: 6087

Answers (1)

6EQUJ5
6EQUJ5

Reputation: 3302

The @ symbol at the start of your PRINT definition is suppressing the command printing.

Try this:

%o : %.cpp
    $(PRINT)
    $(COMPILE_cpp)

where $(COMPILE_cpp) is your first version. Dont forget the tab character indents recipe commands, not spaces.

Upvotes: 2

Related Questions