渲染makefile定义

时间:2018-10-20 16:19:18

标签: makefile macros rendering gnu-make preprocessor

是否可以渲染Makefile?

我的文件包含一个困难的文件,我需要对其进行调试。 当我输入make -f test.mk并按Tab键时,它将显示所有可用的目标,包括那些动态声明的目标。

这意味着,make可以非常快速地渲染makefile,所以我问是否可以将渲染的文件保存在某个地方。

示例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!

1 个答案:

答案 0 :(得分:1)

制表符功能不是由make直接提供的。有人创建了一个bash脚本来为您完成此任务……这是bash_completion软件包的一部分。完成操作是使用make-p-n选项调用-q,然后解析输出以找到目标名称。

因此,简而言之,您可以通过运行make -npq并查看输出来“渲染” makefile(以作某种定义)。请注意,这看起来不会像预处理器的输出,在这里它将显示具有扩展变量等的确切makefile,但在其他方面相同。完成所有解析后,这将是make内部数据结构的转储(尽管以通常类似于makefile的格式打印)。