2016-11-28 40 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

谢谢,这是我需要 –