首页 > 解决方案 > Makefile:当我使用'make -j'时如何控制部分编译顺序?

问题描述

我写了一个makefile,我希望它在编译后由于某些原因执行程序。
但是当我只使用命令'make'时它太慢了。所以我添加了参数'-j'来加快速度。
我只是希望它先编译所有文件并运行自动编译的程序,但它在编译之前先运行程序。
如何部分控制订单?

生成文件

all:test run
test:test1.o test2.o test3.o
    gcc test1.o test2.o test3.o -o test
test1:test1.c
    gcc -c test1.c
test2:test2.c
    gcc -c test2.c
test3:test3.c
    gcc -c test3.c
run:
    ./test

它可能./test在完全编译之前先运行。

标签: makefilegnu-make

解决方案


如何部分控制订单?

您可以通过指定目标之间的依赖关系来控制顺序。在构建其先决条件之前,不会构建目标。

run应该取决于test

run: test
    ./test

.PHONY: run

由于run不是文件或目录,因此应将其标记为.PHONY目标。

我通常有:

run_% : %
    ./$<
.PHONY: run_%

这样您就可以使用make run_thisandmake run_that它首先构建thisand that.


推荐阅读