重新排序 Makefile 中的命令

Reordering commands in a Makefile

我有以下 makefile

.PHONY: target1
target1: target2
  command1

我的工作是 运行 在 target2 之前命令 1。为此,我将 command1 拆分为 command1 和 command2,并按如下方式重写了 Makefile:

.PHONY: target1
target1:
    command1
target1: target2
    command2

但是当我运行这个Makefile时,它只执行target2和command2。命令 1 不是 运行.

一个简单的解决方案是将第一个 target1 重命名为其他名称并在 target2 规则之前调用它。类似于:

.PHONY: target1 target1_cmd
target1_cmd:
    command1
target1: target1_cmd target2
    command2

这将 运行 command1target2 中的任何内容,然后 运行 command2

我不确定我是否了解您要尝试做的所有事情,但如果您需要更多详细信息和解释,请告诉我。

如果 command1 是构建 target2 的第一步,只需将其添加到其配方中:

target1: target2
    command2

target2:
    command1
    <rest of target2 recipe>

如果您想在构建 target2 之前执行 command1,您的问题陈述中缺少的是第三个目标,其配方是 command1。如果 command1 创建文件 target3 那么很简单:

target1: target2
    command2

target2: target3
    <target2 recipe>

target3:
    command1

如果command1没有创建任何文件,您可以使用一个空的标记文件作为command1已经执行的指标:

target1: target2
    command2

target2: target3
    <target2 recipe>

target3:
    command1
    touch "$@"

最后,如果 target1target2 将在每次调用 make 时构建,只需将所有这些声明为假的:

.PHONY: target1 target2 target3

target1: target2
    command2

target2: target3
    <target2 recipe>

target3:
    command1