“多个目标模式”Makefile错误

时间:2010-01-20 10:03:12

标签: makefile

我的makefile因错误而失败:

Makefile:34: *** multiple target patterns.  Stop.

这究竟是什么意思,我该如何解决这个问题?

GNU make manual,由船长Obvious写的,没有帮助。)


找到它。我有形式的规则:

$(FOO): bar

其中FOO是从shell命令设置的,它使用包含冒号的错误消息对其进行污染。

7 个答案:

答案 0 :(得分:51)

我在Makefile上有它

MAPS+=reverse/db.901:550:2001.ip6.arpa 
lastserial:  ${MAPS}
    ./updateser ${MAPS}

这是因为文件名中有:。 我用

解决了这个问题
                      -------- notice
                     /    /
                    v    v
MAPS+=reverse/db.901\:550\:2001.ip6.arpa
lastserial:  ${MAPS}
    ./updateser ${MAPS}

答案 1 :(得分:11)

除了必须像原始答案那样逃避冒号外,我发现如果缩进没有,你可能会遇到同样的问题。在一个makefile中,我不得不用选项卡替换空格,这使我能够超越错误。

答案 2 :(得分:4)

我只想添加,如果你因为使用Cygwin make而得到此错误 自动生成的文件,您可以使用以下sed修复它,

sed -e 's@\\\([^ ]\)@/\1@g' -e 's@[cC]:@/cygdrive/c@' -i filename.d

您可能需要在空格中添加更多字符而不仅仅是空格 第一次替换,但你明白了。这里的概念是/ cygdrive / c是 c的别名:cygwin的make会识别。

并且还可以投入

-e 's@^ \+@\t@'

以防你在事故中以空格开始(虽然我/想/这会 通常是“缺少分隔符”错误。)

答案 3 :(得分:2)

我遇到了同样的错误。 在挣扎之后,我发现这是由于" Space"在文件夹名称中。

例如:

早些时候我的文件夹名称是:  " Qt Projects"

后来我改为: 的" QtProjects"

我的问题已经解决了。

它非常简单但有时是一个重大问题。

答案 4 :(得分:0)

我遇到了这个问题(目标名称中的冒号),因为我的-n环境变量中有GREP_OPTIONS。显然,这导致configure错误地生成Makefile

答案 5 :(得分:0)

我的IDE在我的Makefile中混合了空格和制表符。

将我的Makefile设置为仅使用选项卡为我解决了此错误。

答案 6 :(得分:0)

我也遇到了这个错误(在Windows上基于Eclipse的STM32CubeIDE中)。

双击“多个目标模式”错误后,它显示了一个.ld文件的路径。事实证明这是另一个“非法字符”问题。令人讨厌的字符是(等待): =

本周的启发式:在路径中仅使用[a..z],因为肯定还会有其他非法字符。

GNU make manual并未对此进行明确记录。