在makefile中同时运行一些操作

时间:2019-05-30 17:06:10

标签: unix makefile

我有以下makefile

我希望运行step0,然后我希望所有b*.R脚本同时在step1中运行 step1完成后,我想运行final

当我运行makemake -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

2 个答案:

答案 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

我推荐前者。