是否可以简化以下表单的Makefile以避免代码重复:
dir1/foo:
make -C dir1 foo
dir1/bar:
make -C dir1 bar
dir2/baz:
make -C dir2 baz
...
clean:
make -C dir1 clean
make -C dir2 clean
...
我想我只能指定:
MY_TARGETS=dir1/foo dir1/bar dir2/baz ...
并且有一些一般规则来派生目标,如上面的Makefile中所示。
答案 0 :(得分:2)
您没有向我们提供太多信息。如果你的主makefile和你的例子一样简单(我怀疑),Recursive Make可以是一个很好的解决方案。
你可以这样做:
%:
$(MAKE) -C $(dir $@) $(notdir $@)
clean:
$(MAKE) -C dir1 clean
$(MAKE) -C dir2 clean
...
如果clean
配方太长,您可以简化它:
DIRS := dir1 dir2 ...
clean:
@for x in $(DIRS); do $(MAKE) -C $$x clean; done
或者如果你不喜欢那里有DIRS
列表,你可以让Make生成它,具体取决于你是否要在所有子目录中make clean
,或者所有符合dir*
模式的,或者......你没有给我们足够的信息。