Makefile:7:目标(在同一规则中多次给出
Makefile:7: target ( given more than once in the same rule
我不熟悉make system。 当我尝试执行如下所示的程序时,没有问题:
./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 ) ) )"
制作版本是 3.81
知道吗?
parse ${parameters}:
./prog.out ${parameters}
上面的生成文件片段创建一个名为 parse
的目标,并在变量 parameters
的扩展中为每个单词创建一个目标。
因此,在您的调用make parse parameters="aaa bbb ccc"
中,该行扩展到parse aaa bbb ccc:
,您最终定义了四个目标parse
、aaa
、bbb
和ccc
。
随着调用make parse parameters="( d , ( d , ( d , d ) ) )"
它扩展到parse ( d , ( d , ( d , d ) ) ):
,你可以定义目标parse,
d ,
( ,
, and
) with
d being listed four times,
, three times,
( three times
和 )
三次。(这就是为什么抱怨目标被重新定义的原因。
如果您只想在运行的命令中将其用作parameters
变量,那么您根本不需要在目标行中使用它。
parse:
./prog.out "${parameters}"
,然后使用
make parse parameters="aaa bbb ccc
或
make parse parameters="( d , ( d , ( d , d ) ) )"
一旦我遇到同样的问题,并且在多次头痛之后,我发现变量的定义(对应于我的 Makefile 中的文件夹定义)之后有一些"空格"。消除它们使其有效...
就我而言,OP 提到的错误是由变量声明末尾的注释引起的。
MAIN := main.c # entry point
将注释移动到另一行(单独)解决了问题。
# entry point
MAIN := main.c
我遇到了同样的错误。 文件夹名称中有一个空格。 Eclipse 不能很好地处理文件夹名称或项目名称中的空格。
- 制作文件:没有规则来制定目标:如何设置正确的规则?
- antlr 规则上下文是否可以独立于目标
- C++ 如何将两个 makefile 对象目标规则(位于另一个文件夹中)合并到一个目标/规则中?
- Cassandra C++ MacOS High Sierra上的驱动程序:make:没有规则来制作目标
- 没有规则来设定目标'/usr/lib/x86_64-linux-gnu/libboost_filesystem.so'
- 没有规则来制作目标.o,为什么?
- 无需规则即可将目标设为 .moc
- 没有规则来制作目标'src/main/jni/Build.config'。停
- 制作:没有实现目标的规则 - 找不到源文件
- 没有规则来使目标"TBB_ENV_LIB_DEBUG-NOTFOUND","lib/libopencv_core.so.3.2.0"需要
- 错误“没有规则实现目标……”
- 源外生成与目标文件的规则不匹配
- 没有规则来设定目标.这是什么
- 没有要成为目标的规则:代码块
- 编译Cyanoboot:没有规则来实现目标
- 链接器命令 - 没有为第三方库设定目标的规则
- 生成文件失败,错误没有规则来设定目标
- EclipseCDT:没有使目标全部成为目标的规则
- make:没有规则来设定目标.日食错误
- GNU Make -在规则/目标中设置shell命令输出中的MAKEFILE变量