mus*_*tze 10 makefile gnu-make
我有这样的设置:
/Makefile
/foo/Makefile
/foo/bar/Makefile
/foo/baz/Makefile
Run Code Online (Sandbox Code Playgroud)
顶级Makefile包含一个调用的任务/foo/Makefile.此生成文件会在生成文件的子目录的列表(bar,baz在本例中).对于每个子目录,它调用Makefile:
$(SUB_DIRS):
$(MAKE) -C $@
Run Code Online (Sandbox Code Playgroud)
这对all任务来说是好的.但如果我想做别的事,我就会陷入困境.是否有可能将目标传递给子makefile列表?例如:
$(SUB_DIRS):
$(MAKE) -C $@ <task>
clean: $(SUB_DIRS)-clean # or something?
Run Code Online (Sandbox Code Playgroud)
或者我的整个概念是错的?
你可以简单地使用$(MAKECMDGOALS)变量.
Make会将特殊变量MAKECMDGOALS设置为您在命令行中指定的目标列表.如果在命令行上没有给出目标,则此变量为空.
$(SUB_DIRS):
$(MAKE) -C $@ $(MAKECMDGOALS)
Run Code Online (Sandbox Code Playgroud)
你也可以使用这样的$(foreach )功能:
clean:
$(foreach DIR, $(SUB_DIRS), $(MAKE) -C $(DIR) $@;)
Run Code Online (Sandbox Code Playgroud)