If statement Makefile:存储在';制作';(即第二个命令行参数)isn';行不通

If statement Makefile:存储在';制作';(即第二个命令行参数)isn';行不通,if-statement,makefile,conditional,command-line-arguments,gnu-make,If Statement,Makefile,Conditional,Command Line Arguments,Gnu Make,我试图将在命令行中传递的第二个参数(即make之后的参数)存储在名为NAME的变量中,然后使用它执行一些操作。如果没有第二个参数,则NAME=a 为什么不起作用 下面是我的Makefile中的一个片段: NAME := $(shell $2) ifeq ($(strip $(NAME)),) $(NAME) = a endif # ... and do other things with NAME 它给了我这个错误: *** empty variable name. Stop

我试图将在命令行中传递的第二个参数(即
make
之后的参数)存储在名为
NAME
的变量中,然后使用它执行一些操作。如果没有第二个参数,则
NAME=a

为什么不起作用

下面是我的
Makefile
中的一个片段:

NAME := $(shell $2)

ifeq ($(strip $(NAME)),)
    $(NAME) = a
endif


# ... and do other things with NAME
它给了我这个错误:

*** empty variable name. Stop

您不能在
make
中使用
$1
(及类似)

make
的参数是目标或选项,无法使用
$1
访问


命令
makefoo
指示
make
创建
foo
目标。如果要传递参数,可以使用
make param=foo
,并可以在
Makefile
中访问
${param}
变量(带值
foo
)。

make
中不能使用
$1
(及类似内容)

make
的参数是目标或选项,无法使用
$1
访问


命令
makefoo
指示
make
创建
foo
目标。如果要传递参数,可以使用
make param=foo
,并可以在
Makefile
中访问
${param}
变量(带值
foo
)。

不是
$param
!这可能会扩展为
aram
(或者
whateveraram
,如果定义了make变量
p
,并且具有值
无论什么
)。make语法是
$(param)
${param}
。明白了。谢谢@乌兹索尔特这里还有一个问题。。。有没有办法做到你说的:‘make NAME=foo’。。。但不只是在这个实例中更改名称,而是在文件中覆盖它,然后直接调用“make”,并将“foo”分配给NAME;然后每次你做'make NAME=someName'时,它都会覆盖它;基本上允许您键入一次“make NAME=someName”,而不是每次都希望名称为“someName”。@notAymen您当然可以在
Makefile
中定义
NAME=foo
make
-case:
NAME
是foo。
make NAME=bar
-case:
NAME
是bar。因此,命令行参数覆盖
Makefile
中的声明。而不是
$param
!这可能会扩展为
aram
(或者
whateveraram
,如果定义了make变量
p
,并且具有值
无论什么
)。make语法是
$(param)
${param}
。明白了。谢谢@乌兹索尔特这里还有一个问题。。。有没有办法做到你说的:‘make NAME=foo’。。。但不只是在这个实例中更改名称,而是在文件中覆盖它,然后直接调用“make”,并将“foo”分配给NAME;然后每次你做'make NAME=someName'时,它都会覆盖它;基本上允许您键入一次“make NAME=someName”,而不是每次都希望名称为“someName”。@notAymen您当然可以在
Makefile
中定义
NAME=foo
make
-case:
NAME
是foo。
make NAME=bar
-case:
NAME
是bar。因此,commandline参数覆盖
Makefile
中的声明;您试图设置
NAME
变量扩展到的值,即空字符串,这就是您收到此消息的原因。您需要
NAME=a
。另请注意,当从
shell
赋值时,您应该使用
:=
:这样更有效:
名称:=$(shell…
$(名称)=a
不正确;您试图设置
NAME
变量扩展到的值,即空字符串,这就是您收到此消息的原因。您需要
NAME=a
。另请注意,当从
shell
分配时,您应该使用
:=
:这样更有效:
名称:=$(shell…