Makefile:7:target(在同一规则中给出多次)

时间:2014-12-02 02:45:50

标签: c++ makefile

我不熟悉make系统。当我尝试执行如下程序时,没有问题:

./prog.out arg1 arg2 arg3

当我决定使用make时,我将以下脚本添加到makefile

parse ${parameters}:
     ./prog.out ${parameters}
当它运作良好时,它很奇怪;

 make parse parameters="aaa bbb ccc"

以及这些字符:'('和')'产生错误!

make parse parameters="( d , ( d , ( d , d ) ) )"
Makefile:7: target `(' given more than once in the same rule.
Makefile:7: target `d' given more than once in the same rule.
Makefile:7: target `,' given more than once in the same rule.
Makefile:7: target `(' given more than once in the same rule.
Makefile:7: target `d' given more than once in the same rule.
Makefile:7: target `,' given more than once in the same rule.
Makefile:7: target `d' given more than once in the same rule.
Makefile:7: target `)' given more than once in the same rule.
Makefile:7: target `)' given more than once in the same rule.
./prog.out  ( d , ( d , ( d , d ) ) )
/bin/sh: 1: Syntax error: "(" unexpected
make: *** [parse] Error 2

但这很有效;

./prog.out "( d , ( d , ( d , d ) ) )"

make版本是3.81

任何想法?

4 个答案:

答案 0 :(得分:3)

一旦我遇到同样的问题,经过多次头痛,我发现有一些白色空间'在定义变量之后(对应于我的Makefile中的文件夹定义)。消除它们使它有效...

答案 1 :(得分:2)

parse ${parameters}:
     ./prog.out ${parameters}

上面的makefile代码段为变量parse的扩展中的每个单词创建了一个名为parameters的目标。

因此,在您的调用make parse parameters="aaa bbb ccc"中,该行会扩展为parse aaa bbb ccc:,最后您定义了四个目标parseaaabbb和{{1} }。

通过调用ccc,它会扩展为make parse parameters="( d , ( d , ( d , d ) ) )"并定义目标parse ( d , ( d , ( d , d ) ) ): d parse,,,){{ 1}} d andwithbeing listed four times,three times,三次。(这就是为什么要重新定义目标的原因。

如果您只想在运行的命令中使用three times作为变量,那么根本不需要它在目标行中。

)

然后使用

parameters

parse:
     ./prog.out "${parameters}"

答案 2 :(得分:0)

在我这边,OP提到的错误是由于在变量声明的末尾加上注释引起的。

MAIN := main.c # entry point

将评论移到另一行(单独行),解决了该问题。

# entry point
MAIN := main.c

答案 3 :(得分:-1)

我有同样的错误。文件夹名称中有一个空格。 Eclipse不能很好地处理文件夹名称或项目名称中的空格。