在CDT eclipse中,我有一个带有我自己的makefile的项目。 所以在项目的属性中,我添加了一个配置。我想使用C / C ++ build->构建变量以给我的makefile一些变量。
例如,在构建变量中,我声明:
NAME TYPE VALUE
_FOO String X232
_PLOP String List BLUE || RED
之后,我用C / C ++ Build->编写。 Build Command ::
make -f pathOfMyMakefile FOO={_FOO} PLOP={_PLOP}
make命令为:make -f pathOfMyMakefile FOO=X232 PLOP=BLUE RED
makefile不理解RED(这是正常的......)。我想要一个变量列表。 你知道是否可以给makefile一个字符串列表。 我想在此列表中添加一些变量。
非常感谢。
答案 0 :(得分:0)
作为Make本身,设置多字值的方式与单字值相同。
事实上,它们属于完全相同的变量类别,无论该值是否包含空格(2个字或更多),或者没有(单个字)。
您可以将值设置为Make variables,其中包括以下三种之一:
1. Environment
2. Makefile
3. Command-line
在您的示例中,值由命令行设置,只要变量及其值在一个参数中,所有值包括 值中的任何空格将被设置为变量的值。
通常,在UNIX-shell中,这是通过某种引用来完成的。
例如,给定一个makefile,如:
all:: : $(foo)
这里我们运行Make,使用不同的命令行分配给foo
:
# one-word value $ make foo=a : a # multi-word value $ make foo='a b' : a b # multi-word value $ make foo="a b" : a b # multi-word value $ make foo=a\ b : a b
如你所见,它们都是一样的。
由于shell删除了任何引用,以及传递的内容 - 作为单个参数的Make:&#34; foo = a b&#34;,Make将解析为< strong>单个赋值,即: foo 作为变量名称, ab 作为其值。
但,请比较以下内容:
# try a multi-word assignment in the command-line, without quoting $ make foo=a b make: *** No rule to make target 'b'. Stop.
这是因为Unix-shell会强制在white-space之后有一个新参数,所以Make会看到以下参数:
Argumnet 0: make Argumnet 1: foo=a Argumnet 2: b
现在,参数1是一个变量赋值,具有单字值。 第二个argumnet b ,不是变量赋值,因为它不包含相等的(&#39; =&#39;)符号,因此被视为非选项argumnet(即没有&#39; - &#39;或&#39; - &#39;前缀)的参数,因此被视为明确的默认目标&#39;,覆盖隐含的&#39;所有&#39;我们的makefile中的目标。