如果在命令行上传递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)))
答案 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。