渲染 makefile 定义
Rendering makefile defines
是否可以渲染 makefile?
我有一个复杂的包含包含的 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!
制表符完成功能不是由 make 直接提供的。有人已经创建了一个 bash 脚本来为您完成这些……这是 bash_completion 包的一部分。此完成的作用是使用 -p
、-n
和 -q
选项调用 make
,然后解析输出以查找目标名称。
所以,简而言之,您可以通过 运行 make -npq
"render" 生成文件(对于它的某些定义)并查看输出。请注意,这看起来不像预处理器的输出,它显示带有扩展变量等的确切 makefile,但其他方面相同。这将是所有解析完成后 make 内部数据结构的转储(尽管以通常类似于 makefile 的格式打印)。
是否可以渲染 makefile?
我有一个复杂的包含包含的 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!
制表符完成功能不是由 make 直接提供的。有人已经创建了一个 bash 脚本来为您完成这些……这是 bash_completion 包的一部分。此完成的作用是使用 -p
、-n
和 -q
选项调用 make
,然后解析输出以查找目标名称。
所以,简而言之,您可以通过 运行 make -npq
"render" 生成文件(对于它的某些定义)并查看输出。请注意,这看起来不像预处理器的输出,它显示带有扩展变量等的确切 makefile,但其他方面相同。这将是所有解析完成后 make 内部数据结构的转储(尽管以通常类似于 makefile 的格式打印)。