【问题标题】:Makefile target color outputMakefile 目标颜色输出
【发布时间】:2014-06-10 11:00:44
【问题描述】:

我写了一个运行良好的 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 $&lt; $(MAKEDEP) $(INCLUDES) 已正确执行但不再打印到屏幕上;我仍然可以看到最终的警告和错误。

我想避免使用外部工具(例如 colorgcc 或 CMake)并使用 bash 脚本技巧来破解它。

提前致谢!

编辑 稍微补充一点:如果我想做一些类似 grep 当前构建文件的输出的操作,以查找 errorwarning 等字符串,该怎么办?

我想突出显示它们,我正在考虑在编译器输出上调用 sed 来更改某些单词的颜色...

【问题讨论】:

    标签: linux bash colors makefile


    【解决方案1】:

    PRINT 定义开头的 @ 符号正在禁止打印命令。

    试试这个:

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

    其中 $(COMPILE_cpp) 是您的第一个版本。 不要忘记制表符缩进配方命令,不是空格。

    【讨论】:

    • 谢谢 6EQUJ5,它有效!实际上我必须使用@,否则我会得到重复的输出(预期的彩色打印和纯文本命令的字符串)
    • @helmet_23 您想要print 行上的@。您不希望它出现在编译行上。问题是您将两者组合成一个命令并告诉 make 隐藏该命令。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 2014-04-19
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多