我写了一个Makefile,它工作得很好;我不会将其全部发布,仅发布正在调查的部分内容:
COMPILE_cpp = $(CXX) $(CFLAGS) -o $@ -c $< $(MAKEDEP) $(INCLUDES)
%.o : %.cpp ; $(COMPILE_cpp)
.SUFFIXES: .o .cpp
上面的代码履行了它的职责。由于构建过程涉及许多文件,我想添加一些颜色输出。我尝试过以下方法
PRINT = @echo -e "\e[1;34mBuilding $<\e[0m"
COMPILE_cpp = $(PRINT) && $(CXX) $(CFLAGS) -o $@ -c $< $(MAKEDEP) $(INCLUDES)
%.o : %.cpp ; $(COMPILE_cpp)
.SUFFIXES: .o .cpp
Makefile 仍然可以正常工作,但现在我只能看到 $(PRINT)
的输出与所选的颜色。命令字符串$(CXX) $(CFLAGS) -o $@ -c $< $(MAKEDEP) $(INCLUDES)
正确执行但不再打印到屏幕上;我仍然可以看到最终的警告和错误。
我想避免使用外部工具(例如 colorgcc 或 CMake)并使用 bash 脚本技巧来破解它。
提前致谢!
编辑
只需添加一点:如果我想做一些类似于 grep 当前构建文件的输出的操作,以便查找诸如 error
之类的字符串,该怎么办?或warning
?
我想强调一下它们,我正在考虑调用 sed
在编译器输出上更改一些单词的颜色...
最佳答案
PRINT
定义开头的 @
符号会抑制命令打印。
试试这个:
%o : %.cpp
$(PRINT)
$(COMPILE_cpp)
其中 $(COMPILE_cpp) 是您的第一个版本。 不要忘记制表符缩进配方命令,不是空格。
关于linux - Makefile目标颜色输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24139328/