有人可以告诉我是否有一种方法可以强制执行特定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)
但是由于某些原因,所有目标仍然并行运行,所以我仍然遇到相同的构建失败。有什么想法吗?
答案 0 :(得分:1)
Make完全基于依赖项的概念构建。您只是没有那样使用它。
如果可执行文件依赖于库,则应在可执行文件的先决条件列表中列出该库。我无法提供相关示例,因为您没有提供有关以上dep_lib
或dep_bin
内容的任何详细信息,但例如:
exe1 : exe1.o liblib1.a liblib2.a
等现在,在创建exe1
和liblib1.a
目标之后,liblib2.a
才尝试链接。