Makefile: 並行執行的例子

#example to parallel running

#Makefile

a:
    @$(SHELL) -c 'for((i=1;i<=10;i++));do sleep 1; echo I am a ;done '
b:
    @$(SHELL) -c 'for((i=1;i<=10;i++));do sleep 1; echo I am b ;done '


PC$ make a b

I am a
I am a
I am a
I am a
I am a
I am a
I am a
I am a
I am a
I am a
I am b
I am b
I am b
I am b
I am b
I am b
I am b
I am b
I am b
I am b

PC$ make a b -j2

I am a
I am b
I am a
I am b
I am a
I am b
I am a
I am b
I am b
I am a
I am b
I am a
I am b
I am a
I am b
I am a
I am b
I am a
I am b
I am a

說明:命令make a b 是按着順序執行的,所花的時間是20。命令make a b -j2是並行執行,所花的時間是10秒。因爲a任務和b任務不存在依賴的關係。兩者是可以並行執行的。

如果是依賴的話:

#Makefile1

a:b
    @$(SHELL) -c 'for((i=1;i<=10;i++));do sleep 1; echo I am a ;done '
b:
    @$(SHELL) -c 'for((i=1;i<=10;i++));do sleep 1; echo I am b ;done '

PC$make -f Makefile1 -j2

I am b
I am b
I am b
I am b
I am b
I am b
I am b
I am b
I am b
I am b
I am a
I am a
I am a
I am a
I am a
I am a
I am a
I am a
I am a
I am a

說明:有依賴關係的話,當然是按着依賴關係順序執行了。


再看

#Makefile2

a:b c
    @$(SHELL) -c 'for((i=1;i<=10;i++));do sleep 1; echo I am a ;done '
b:
    @$(SHELL) -c 'for((i=1;i<=10;i++));do sleep 1; echo I am b ;done '
c:
    @$(SHELL) -c 'for((i=1;i<=10;i++));do sleep 1; echo I am c ;done '

PC$make -f Makefile2 -j3

I am b
I am c
I am b
I am c
I am b
I am c
I am b
I am c
I am b
I am c
I am b
I am c
I am b
I am c
I am b
I am c
I am b
I am c
I am b
I am c
I am a
I am a
I am a
I am a
I am a
I am a
I am a
I am a
I am a
I am a

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章