2016-11-28 129 views
1

我有一個makefile和幾個目標。我想先清理目錄,然後建立目錄,然後運行tasks1..4的編譯。有時候編譯目錄會在編譯之後開始,這使編譯變得不可能。如何在makefile中指定優先級

Makefile文件一般看起來像:

release: clean 
release: build 
release: task1 task2 
release: task3 task4 

清理並生成必須tasks1..4開始運行前完成。換句話說,如何在makefile任務中指定優先級。現在看起來,makefile中的所有4行都是在一瞬間開始的。

回答

4

我假設你正在使用-j;沒有啓用並行構建make將永遠不會一起啓動任何規則:它始終按照列出先決條件的順序逐個運行它們。

指定訂單的唯一方法是通過先決條件。所以,這看起來像:

release: task1 task2 task3 task4 
task1 task2 task3 task4: build 
build: clean 

然而,這最後一步是一個非常糟糕的主意:你不希望你的構建目標依賴於一般的清潔,否則它將始終運行。你可以讓人們手動清理,但可能最常見的方式來處理這樣的發佈目標是使遞歸:

release: 
     $(MAKE) clean 
     $(MAKE) build 
     $(MAKE) task1 task2 task3 task4 
+0

謝謝,這是我需要 –