Makefile常见的对于打印信息的控制代码如下,乍一看有点蒙蔽,所以深入研究了下:
SILENT=@ ---1
CT_ECHO=echo --2
ifeq ($(strip $(origin V)),command line) ---3
ifeq ($(strip $(V)),0) ---4
SILENT=@ ---5
CT_ECHO=: ---6
else
ifeq ($(strip $(V)),1) ---7
SILENT= ---8
CT_ECHO=: ---9
else
ifeq ($(strip $(V)),2) ---10
SILENT= ---11
CT_ECHO=echo ----12
endif # V == 2
endif # V== 1
endif # V == 0
endif # origin V
本文将详细说明每行代码的作用,为了方便说明,本文以一个简单的例子为基础,如下所示,为一个简单的Makefile
SILENT=@
CT_ECHO=echo
ifeq ($(strip $(origin V)),command line)
#一个不打印
ifeq ($(strip $(V)),0)
SILENT=@
CT_ECHO=:
else
ifeq ($(strip $(V)),1)
SILENT=
CT_ECHO=:
else
ifeq ($(strip $(V)),2)
SILENT=
CT_ECHO=echo
endif # V == 2
endif # V== 1
endif # V == 0
endif # origin V
all: help
help:
$(SILENT)$(CT_ECHO) test...
1. 1~2配置默认值,如果make没有指定v=xx,则以这种模式去打印调试信息,这种模式表示不输出要执行的命令,但是输出调试信息
如$(SILENT)$(CT_ECHO) test,则输入如下:
2. 第3行有必要解释下,$(origin V)是在获取变量V的来源,如果是来源于执行命令后跟的参数,则为command line(其它情况见相关章节介绍),strip表示合并多余的空格、去掉起始和结束字符串。所以这行的意思是判断V是否来源于命令行。
3. 第4行表示V如果等于0,则不输出命令,且不输出任何内容,如下图所示,什么都没有,这种模式是最安静的一种模式了,基本不会打印信息
4. 第7行表示判断V是否等于1,如果等于1,则SILENT为空,CT_ECHO为:这种模式下,会输出要执行的命令,并在前面加上:,不会输出要打印的信息。这种模式属于中间派系,有些调试信息输出,但不是很多,如下图所示:
5. 第10行表示判断V是否等于2,如果等于2,则SILENT为空,CT_ECHO为echo,说明不仅输出即将执行的命令,还会输出要打印的信息,如下图所示:
以上就是Makefile打印打印信息的配置方案的详细解释,欢迎大家一起交流