Makefile 并行化外部生成文件
我有这个MakefileMakefile 并行化外部生成文件,makefile,multiple-makefiles,Makefile,Multiple Makefiles,我有这个Makefile framework: @$(MAKE) -C $(HIGGSBASESELECTOR) @$(MAKE) -C $(MATRIX4) @$(MAKE) -C $(SUBSELECTOR) @$(MAKE) -C $(MCSUBSELECTOR) @$(MAKE) -C $(MATRIXSUBSELECTOR) @$(MAKE) -C $(CHECKSUBSELECTOR) ... 如果我跑 make -j f
framework:
@$(MAKE) -C $(HIGGSBASESELECTOR)
@$(MAKE) -C $(MATRIX4)
@$(MAKE) -C $(SUBSELECTOR)
@$(MAKE) -C $(MCSUBSELECTOR)
@$(MAKE) -C $(MATRIXSUBSELECTOR)
@$(MAKE) -C $(CHECKSUBSELECTOR)
...
如果我跑
make -j framework
它只使用一个进程。重构此Makfile以并行编译的最佳(快速)方法是什么?您的规则按顺序执行
$(MAKE)
命令,因此一次只看到一个进程也就不足为奇了
一种快速而肮脏的方法(如果没有任何东西等待这些调用的结果)是
如果这让你的血液变得冰冷(应该如此),你可以这样做:
framework: $(HIGGSBASESELECTOR) $(MATRIX4) $(SUBSELECTOR) ...
do things after the calls
.PHONY: $(HIGGSBASESELECTOR) $(MATRIX4) $(SUBSELECTOR) ...
$(HIGGSBASESELECTOR) $(MATRIX4) $(SUBSELECTOR) ...:
@$(MAKE) -C $@
我得到:
Makefile:88:**多个目标模式。停止。
在.PHONY
线路上,我假设HiggbaseSelector
,MATRIX4
等都是简单的路径。它们是什么?(另外,我假设您知道,..
指的是剩余的目标目录,MCSUBSELECTOR
等等。)您能给出一个产生错误的路径示例吗?另外,您使用的Make版本是什么?
framework: $(HIGGSBASESELECTOR) $(MATRIX4) $(SUBSELECTOR) ...
do things after the calls
.PHONY: $(HIGGSBASESELECTOR) $(MATRIX4) $(SUBSELECTOR) ...
$(HIGGSBASESELECTOR) $(MATRIX4) $(SUBSELECTOR) ...:
@$(MAKE) -C $@