我有一个makefile和几个目标。我想首先清理目录,然后构建目录,然后运行tasks1..4的编译。有时构建目录在编译后开始,这使编译成为不可能。
Makefile一般如下:
release: clean
release: build
release: task1 task2
release: task3 task4
必须在tasks1..4开始运行之前完成清理和构建。换句话说,如何在makefile任务中指定优先级。现在看来makefile中的所有4行都会在一瞬间完全启动。
答案 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