Makefile 新目标如何使用附加参数调用以前的目标?

Makefile 新目标如何使用附加参数调用以前的目标?,makefile,gnu-make,Makefile,Gnu Make,我有这样的代码片段: .PHONY: program1 program2 a=A b=B c=C program1: @python example.py a=$(a) b=$(b) program2: program1 c=$(c) d=d 由于DRY原则,我不想以调用program1的方式复制代码和组合program2 但我知道program1不在路径中 如何正确定义程序2目标?规则的配方包含shell命令生成不会直接执行它们。它用来执行它们的shell与任何其他s

我有这样的代码片段:

.PHONY: program1 program2

a=A
b=B
c=C

program1: 
    @python example.py a=$(a) b=$(b)

program2:
    program1 c=$(c) d=d
由于DRY原则,我不想以调用
program1
的方式复制代码和组合
program2

但我知道
program1
不在路径中


如何正确定义
程序2
目标?

规则的配方包含shell命令<代码>生成不会直接执行它们。它用来执行它们的shell与任何其他shell一样,不能将
make
目标名称识别为命令,因此菜谱不能将
make
目标用作命令

但是配方可以运行
make
,这是一个传统上称为“递归make”的过程。例如,此规则将实现我认为您所描述的:

program2:
        $(MAKE) program1 c='$(c)' d=d

MAKE
变量通常会扩展到您使用的MAKE命令的名称——通常只是
MAKE
,但可能类似于
gmake
/special/path/MAKE
。您还可以在makefile中自己重新定义它,例如,可以向它添加标志。

规则的配方包含shell命令<代码>生成不会直接执行它们。它用来执行它们的shell与任何其他shell一样,不能将
make
目标名称识别为命令,因此菜谱不能将
make
目标用作命令

但是配方可以运行
make
,这是一个传统上称为“递归make”的过程。例如,此规则将实现我认为您所描述的:

program2:
        $(MAKE) program1 c='$(c)' d=d
MAKE
变量通常会扩展到您使用的MAKE命令的名称——通常只是
MAKE
,但可能类似于
gmake
/special/path/MAKE
。您还可以在makefile中自己重新定义它,例如,可以向它添加标志