重新排序 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
这将 运行 command1
,target2
中的任何内容,然后 运行 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 "$@"
最后,如果 target1
和 target2
将在每次调用 make 时构建,只需将所有这些声明为假的:
.PHONY: target1 target2 target3
target1: target2
command2
target2: target3
<target2 recipe>
target3:
command1
我有以下 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
这将 运行 command1
,target2
中的任何内容,然后 运行 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 "$@"
最后,如果 target1
和 target2
将在每次调用 make 时构建,只需将所有这些声明为假的:
.PHONY: target1 target2 target3
target1: target2
command2
target2: target3
<target2 recipe>
target3:
command1