./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
任何想法?
答案 0 :(得分:3)
一旦我遇到同样的问题,经过多次头痛,我发现有一些白色空间'在定义变量之后(对应于我的Makefile中的文件夹定义)。消除它们使它有效...
答案 1 :(得分:2)
parse ${parameters}:
./prog.out ${parameters}
上面的makefile代码段为变量parse
的扩展中的每个单词创建了一个名为parameters
的目标。
因此,在您的调用make parse parameters="aaa bbb ccc"
中,该行会扩展为parse aaa bbb ccc:
,最后您定义了四个目标parse
,aaa
,bbb
和{{1} }。
通过调用ccc
,它会扩展为make parse parameters="( d , ( d , ( d , d ) ) )"
并定义目标parse ( d , ( d , ( d , d ) ) ):
d parse,
(,
,,
){{ 1}} d and
,with
(being 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不能很好地处理文件夹名称或项目名称中的空格。