GNU make - 执行目标订单

问题描述 投票:-1回答:1

有人可以告诉我是否有办法强制执行特定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_liball_bin,一个构建所有库,另一个构建所有二进制可执行文件。当我通过-j来运行并行作业时,我会遇到构建失败,因为所有目标并行运行,而二进制文件无法找到共享库对象和分阶段头文件。

我尝试将其更改为此尝试强制一些依赖顺序:

.PHONY: all
all: all_bin

.PHONY: all_lib
all_lib: $(dep_lib)

.PHONY: all_bin
all_bin: all_lib $(dep_bin)

但由于某种原因,所有目标仍然并行运行,我仍然会遇到相同的构建失败。有任何想法吗?

makefile
1个回答
1
投票

Make完全围绕依赖的概念构建。你根本就没有这样使用它。

如果可执行文件依赖于库,则应在可执行文件的先决条件列表中列出该库。我不能给你一个相关的例子,因为你没有提供有关上面dep_libdep_bin内容的任何细节,但是例如:

exe1 : exe1.o liblib1.a liblib2.a

现在,在exe1liblib1.a目标创建之后,liblib2.a将不会尝试链接。

© www.soinside.com 2019 - 2024. All rights reserved.