2010-01-20 47 views
54

我的makefile失败,错误:“多个目标模式”的Makefile错误

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

是什么真正的意思,我怎样才能解决这个问题?

GNU make manual,由Captain Obvious编写,没有帮助)。


找到它了。我曾在形式规则:

$(FOO): bar 

其中FOO从shell命令与包含冒号错误消息,污秽了设置。

+0

请问http://www-01.ibm.com/support/docview.wss?uid=swg21119863或http://sourceware.org/ml/crossgcc/2009-07/msg00006.html帮助? – 2010-01-20 10:05:03

+2

谷歌迅速显示http://groups.google.com/group/gnu.utils.help/browse_frm/thread/d7eeff06e2b8394/1c932a7ea7664ade?lnk=st&q=%22multiple+target+patterns%22&rnum=7#1c932a7ea7664ade – 2010-01-20 10:08:40

+0

这些答案只是“你有多种目标模式”的解释。好吧,我想我没有。我如何检查它?什么可以触发它?需要采取哪些预防措施来防止此问题? – Kornel 2010-01-22 22:39:41

回答

41

我有它在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} 
+0

我有同样的问题,但我不明白你的答案,你会为我进一步详细说明, – 2013-01-11 20:08:24

+0

你让我吗? – 2013-01-11 20:16:10

+2

@PirFahimShah答案是指出冒号(db.901:550:2001.ip6.arpa)中的冒号需要转义。 mcr通过在他们之前放置反斜线来逃避冒号。这样,make不会将冒号解释为特殊符号。 – Aaron 2016-08-18 14:04:04

7

解决了这个除了有逃避冒号作为原来的答案,我发现,如果压痕是关闭的,你可能会得到同样的问题。在一个makefile中,我不得不用一个tab替换空格,并且允许我通过错误。

+0

在这种情况下,GNU make也可能会报告“没有针对目标的规则”。 – davenpcj 2013-08-15 19:38:39

4

我只想补充,如果你是因为你使用的是Cygwin的制作和 自动生成的文件得到这个错误,你可以用下面的sed修复,

sed -e '[email protected]\\\([^ ]\)@/\[email protected]' -e '[email protected][cC]:@/cygdrive/[email protected]' -i filename.d 

您可能需要增加更多的字符不仅仅是空间到 第一次替换中的转义列表,但您明白了。这里的概念是/ cygdrive/c是 c:cygwin的make将会识别的别名。

,并且可以在

-e '[email protected]^ \[email protected]\[email protected]' 

以及抛出,以防万一你有没有事故的空间开始(虽然我/想/这将 通常是“失踪分离器”的错误)。

0

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

2

我遇到了同样的错误。 挣扎后,我发现这是由于文件夹名称中的“空格”。

例如:

早些时候我的文件夹名称为: “Qt的项目”

后来我把它改为: “QtProjects”

,我的问题就解决了。

它非常简单,但有时是一个主要问题。