是否可以渲染Makefile?
我的文件包含一个困难的文件,我需要对其进行调试。
当我输入make -f test.mk
并按Tab键时,它将显示所有可用的目标,包括那些动态声明的目标。
这意味着,make可以非常快速地渲染makefile,所以我问是否可以将渲染的文件保存在某个地方。
define define_target
$(eval _target_name := $(1))
$(info Defining a target: $(_target_name))
$(_target_name):
@echo $(_target_name) triggererd.
endef
$(eval $(call define_target,test))
$(eval $(call define_target,echo))
all: test
all: echo
all:
@echo Done!
peter@peterpc:~/test$ make # Double Tab pressed here to trigger autocompletion
all echo test # All targets except the "all" were defined dynamically!
peter@peterpc:~/test$ make all
Defining a target: test
Defining a target: echo
test triggererd.
echo triggererd.
Done!
test:
@echo test triggered.
echo:
@echo echo triggered.
all: test
all: echo
all:
@echo Done!
答案 0 :(得分:1)
制表符功能不是由make直接提供的。有人创建了一个bash脚本来为您完成此任务……这是bash_completion软件包的一部分。完成操作是使用make
,-p
和-n
选项调用-q
,然后解析输出以找到目标名称。
因此,简而言之,您可以通过运行make -npq
并查看输出来“渲染” makefile(以作某种定义)。请注意,这看起来不会像预处理器的输出,在这里它将显示具有扩展变量等的确切makefile,但在其他方面相同。完成所有解析后,这将是make内部数据结构的转储(尽管以通常类似于makefile的格式打印)。