有人可以告诉我是否有办法强制执行特定Makefile目标的顺序执行。例如,我有一个构建库和可执行文件的Makefile。现在,可执行文件依赖于库,因此必须在构建和暂存库之后构建它们。这是我目前在单个Makefile中的内容:
.PHONY: all
all: all_lib all_bin
.PHONY: all_lib
all_lib: $(dep_lib)
.PHONY: all_bin
all_bin: $(dep_bin)
我有两个目标all_lib
和all_bin
,一个构建所有库,另一个构建所有二进制可执行文件。当我通过-j
来运行并行作业时,我会遇到构建失败,因为所有目标并行运行,而二进制文件无法找到共享库对象和分阶段头文件。
我尝试将其更改为此尝试强制一些依赖顺序:
.PHONY: all
all: all_bin
.PHONY: all_lib
all_lib: $(dep_lib)
.PHONY: all_bin
all_bin: all_lib $(dep_bin)
但由于某种原因,所有目标仍然并行运行,我仍然会遇到相同的构建失败。有任何想法吗?
Make完全围绕依赖的概念构建。你根本就没有这样使用它。
如果可执行文件依赖于库,则应在可执行文件的先决条件列表中列出该库。我不能给你一个相关的例子,因为你没有提供有关上面dep_lib
或dep_bin
内容的任何细节,但是例如:
exe1 : exe1.o liblib1.a liblib2.a
现在,在exe1
和liblib1.a
目标创建之后,liblib2.a
将不会尝试链接。