在Eclipse C / C ++中的构建设置中构建命令

时间:2015-07-22 13:42:15

标签: eclipse string list makefile

在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一个字符串列表。 我想在此列表中添加一些变量。

非常感谢。

1 个答案:

答案 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中的目标。