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…