我想並行化一箇舊的Makefile。臨界區並行make文件
事實上,我需要確保在編譯過程開始之前,某些生成器腳本被稱爲而不是並行。
生成器在編譯之前總是被調用。有什麼辦法可以在makefile中建立一個有點關鍵的部分嗎?
Makefile很麻煩,我不想在這裏發佈它。
我想並行化一箇舊的Makefile。臨界區並行make文件
事實上,我需要確保在編譯過程開始之前,某些生成器腳本被稱爲而不是並行。
生成器在編譯之前總是被調用。有什麼辦法可以在makefile中建立一個有點關鍵的部分嗎?
Makefile很麻煩,我不想在這裏發佈它。
你可以把所生成文件的規則,在一個單獨的Makefile,做這樣的事情:
generated-sources :
$(MAKE) -f Makefile.Generators
然而,GNU製作,這將是默認平行。你需要壓制它,而手冊並不完全清楚你將如何做到這一點。也許下面的一些組合會工作,這取決於你想支持哪個做的實現:
傳遞-j1
標誌:
generated-sources :
$(MAKE) -j1 -f Makefile.Generators
禁止MAKEFLAGS
選項:
generated-sources :
$(MAKE) -f Makefile.Generators MAKEFLAGS=
用Makefile.Generators
中的以下行抑制並行執行:
.NOTPARALLEL :
關於.NOTPARALLEL選項的註釋:該目標將忽略指定的任何前置請求。包含這個目標的任何生成文件將被強制進行串行構建。因此,您可以將需要在單獨的makefile中串行構建的東西添加到.NOTPARALLEL目標中。這與ClearCase構建工具Clearmake不同,它允許您指定一組將被視爲與並行構建相互排斥的目標。 – 2011-08-08 18:27:46
您可以運行所有腳本的規則,並確保所有的其他規則依賴於該規則。
all: ${SOURCES} scripts
scripts: last_script
first_script:
./script1.sh
second_script: first_script
./script2.sh
last_script: second_script
./script3.sh
source1.o: source1.c scripts
gcc source1.c -c -o source1.o
哪個版本的make? – 2011-05-20 10:05:36