简洁地将详细输出添加到GNU make

时间:2018-07-31 07:12:42

标签: makefile gnu-make

如果在命令行上传递V=1,我想将详细输出添加到gnu makefile中。

我已经可以按照以下三行内容进行操作了:

ifeq ($(V),1)
$(info SRC_FILES=$(SRC_FILES))
endif

还有更多简洁的习惯用法,例如全部出现在一行上吗?理想情况下,我想要类似的东西:

$(verbose SRC_FILES=$(SRC_FILES))

这可能是不可能的,或者至少是一种单行代码:

$(if $(V) $(info SRC_FILES=$(SRC_FILES)))

2 个答案:

答案 0 :(得分:1)

temp = temp.dropna(subset=['UID']) 几乎可以满足您的需求。唯一的缺点是,当V未定义时,它将输出一个空行。

编辑:从MadScientist的话说起,正如BeeOnRope最初建议的那样,$(info $(if $(V),SRC_FILES=$(SRC_FILES)))的工作原理与预期的一样,当V未定义时没有空行。

您还可以定义一个宏,当且仅当定义了$(if $(V),$(info SRC_FILES=$(SRC_FILES)))时,该宏才会打印有关变量的信息消息:

V

当然,如果要使用更通用的宏,可以将文本传递给它来打印:

define verbose
$(if $(V),$(info $(1) = $($(1))))
endef

$(call verbose,SRC_FILES)

请注意,您可能还希望使用详细程度变量控制其他类型的信息。对于命令回显,命令输出和 quiet 命令选项,我经常使用以下命令:

define verbose
$(if $(V),$(info $(1)))
endef

$(call verbose,SRC_FILES = $(SRC_FILES))

答案 1 :(得分:0)

也许这是可行的:

verbose = $(if $(VERBOSITY),$(info $(-verbose)))
-verbose = $(if $(findstring 0,$(VERBOSITY)),$1 )$(if $(findstring 1,$(VERBOSITY)),$2 )$(if $(findstring 2,$(VERBOSITY)),$3 )$(if $(findstring 3,$(VERBOSITY)),$4 )$(if $(findstring 4,$(VERBOSITY)),$5 )$(if $(findstring 5,$(VERBOSITY)),$6 )$(if $(findstring 6,$(VERBOSITY)),$7 )$(if $(findstring 7,$(VERBOSITY)),$8 )$(if $(findstring 8,$(VERBOSITY)),$9 )$(if $(findstring 9,$(VERBOSITY)),$(10) )

VERBOSITY = 0

$(call verbose,warninglevel 1,warninglevel 2,warninglevel 3,info 1,info 2,info 3)

VERBOSITY = 2

$(call verbose,warninglevel 1,warninglevel 2,warninglevel 3,info 1,info 2,info 3)


VERBOSITY = 012345

$(call verbose,warninglevel 1,warninglevel 2,warninglevel 3,info 1,info 2,info 3)

输出:

warninglevel 1
warninglevel 3
warninglevel 1 warninglevel 2 warninglevel 3 info 1 info 2 info 3

我已将其添加到gmtt