如何在makefile中指定优先级

时间:2016-11-28 14:27:08

标签: gcc makefile

我有一个makefile和几个目标。我想首先清理目录,然后构建目录,然后运行tasks1..4的编译。有时构建目录在编译后开始,这使编译成为不可能。

Makefile一般如下:

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

必须在tasks1..4开始运行之前完成清理和构建。换句话说,如何在makefile任务中指定优先级。现在看来makefile中的所有4行都会在一瞬间完全启动。

1 个答案:

答案 0 :(得分:4)

我假设你正在使用-j;如果没有启用并行构建,make将永远不会一起启动任何规则:它始终按照列出先决条件的顺序一次运行一个规则。

指定顺序的唯一方法是通过先决条件。所以,这看起来像:

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

然而,最后一步是一个非常糟糕的想法:您不希望您的构建目标通常依赖于clean,否则它将始终运行。您可以要求人们手动清理,但是最常见的处理发布目标的方法是使用make recursion:

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