Makefile 如何在变量中间插入特设参数?

Makefile 如何在变量中间插入特设参数?,makefile,gnu-make,Makefile,Gnu Make,我有以下生成文件: PROG := "prog -o1 one -o2 two --" 在--之后不能出现任何内容。这通常是我想要的prog调用模式: thing: $(PROG) some files here 但是有一个特殊的目标,我想称之为prog-o1-o2-2-o3-3-其他一些文件,所以我尝试做的是(假设:=设置变量进行延迟计算,尽管我似乎误解了其中的上下文): 似乎PROG在分配时被扩展为:=;有没有一种方法可以实现我想要的(例如,通过某种延迟扩展)?在更仔细地阅读手册

我有以下生成文件:

PROG := "prog -o1 one -o2 two --"
--
之后不能出现任何内容。这通常是我想要的
prog
调用模式:

thing:
    $(PROG) some files here
但是有一个特殊的目标,我想称之为
prog-o1-o2-2-o3-3-其他一些文件
,所以我尝试做的是(假设
:=
设置变量进行延迟计算,尽管我似乎误解了其中的上下文):


似乎
PROG
在分配时被扩展为
:=
;有没有一种方法可以实现我想要的(例如,通过某种延迟扩展)?

在更仔细地阅读手册后,我了解到
:=
作业会立即展开,而
=
会递归展开(出于我的目的,“延迟”)

使用
=
分配
PROG
,并像以前一样给出特定于目标的变量,以下操作有效:

PROG = prog -o1 one -o2 two $(OTHER_PROG_ARGS) --

thing:
    $(PROG) some files here

other: OTHER_PROG_ARGS = -o3 three
other:
    $(PROG) some other file

你真的,真的不想在变量中加引号。Make不是shell:它不解析任何引号。它们被简单地当作普通字符处理并传递给shell,这将破坏您的命令。@madcasciient Nice catch,谢谢:-)我已更新了答案以省略引号。
PROG = prog -o1 one -o2 two $(OTHER_PROG_ARGS) --

thing:
    $(PROG) some files here

other: OTHER_PROG_ARGS = -o3 three
other:
    $(PROG) some other file