我有以下makefile
。
我希望运行step0
,然后我希望所有b*.R
脚本同时在step1
中运行 。 step1
完成后,我想运行final
。
当我运行make
或make -j 8
时,似乎所有b*.R
文件仍按顺序运行。是否已正确设置此makefile
以便同时运行所有b*.R
文件?如果没有,我需要更改什么。
final : step1
Rscript c.R
step1 : step0
Rscript b1.R
Rscript b2.R
Rscript b3.R
Rscript b4.R
Rscript b5.R
Rscript b6.R
step0 :
Rscript a.R
答案 0 :(得分:2)
当我运行make或make -j 8时,似乎所有b * .R文件仍按顺序运行。
-jN
允许并行执行不同配方,而不是构成配方的单个命令。
因此,makefile应该像这样重组:
.PHONY: final b1 b2 b3 b4 b5 b6 step0
final: b1 b2 b3 b4 b5 b6
b1 b2 b3 b4 b5 b6: step0
b1: ;Rscript b1.R
b2: ;Rscript b2.R
b3: ;Rscript b3.R
b4: ;Rscript b4.R
b5: ;Rscript b5.R
b6: ;Rscript b6.R
step0: ;Rscript a.R
答案 1 :(得分:1)
如果要让make为您处理并行性,则需要重组makefile以具有不同的目标。例如:
step1: b1 b2 b3 b4 b5 b6
b1: step0
Rscript b1.R
b2: step0
Rscript b2.R
...
step0 :
Rscript a.R
或者,您可以让外壳执行并行操作并编写:
step1: step0
Rscript b1.R & Rscript b2.R & \
Rscript b3.R & ... & wait
我推荐前者。