dub*_*uga 14 parallel-processing makefile
我正在寻找一种优雅的方式来实现GNU make中的作业并行化.这是我到目前为止所做的一个例子.以串行方式处理目录dir-1,dir-2和dir-3,这是合乎逻辑的,但不是我的意图:
SUBDIRS=dir-1 dir-2 dir-3
default: all
all:
@for dir in $(SUBDIRS); do (cd $$dir; $(MAKE)); done
.PHONY: clean
clean:
@for dir in $(SUBDIRS); do (cd $$dir; $(MAKE) clean); done
Run Code Online (Sandbox Code Playgroud)
有没有办法支持使用"-j"选项并行处理这些目录而不为每个目录指定特定目标?
mr *_*mpy 15
SUBDIRS = a b c
default: all
$(SUBDIRS)::
$(MAKE) -C $@ $(MAKECMDGOALS)
all clean : $(SUBDIRS)
Run Code Online (Sandbox Code Playgroud)
这可能不会直接回答你的问题,但除了其他答案提出的建议外,我建议研究非递归制作技巧.这确实是一种优化的并行化构建方式,但是,根据现有的Makefile,可能需要付出很大的努力.非递归make具有不仅限于简单并行化的优点:它看到完整的依赖图,因此不需要构建太少或太多,意味着更快(有时更快)的构建时间.
一些资源: