GNU中的递归作业的并行化

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)

  • 关于双冒号的解释:https://www.gnu.org/software/make/manual/html_node/Double_002dColon.html (2认同)

Lau*_*nis 5

这可能不会直接回答你的问题,但除了其他答案提出的建议外,我建议研究非递归制作技巧.这确实是一种优化的并行化构建方式,但是,根据现有的Makefile,可能需要付出很大的努力.非递归make具有不仅限于简单并行化的优点:它看到完整的依赖图,因此不需要构建太少或太多,意味着更快(有时更快)的构建时间.

一些资源: