Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile &引用;“多目标模式”;生成文件错误_Makefile - Fatal编程技术网

Makefile &引用;“多目标模式”;生成文件错误

Makefile &引用;“多目标模式”;生成文件错误,makefile,Makefile,我的makefile失败,错误为: Makefile:34: *** multiple target patterns. Stop. 这到底意味着什么,我该如何解决这个问题 (,由船长写的,显然没有帮助) 找到了。我在形式上有规则: $(FOO): bar 其中,FOO是通过shell命令设置的,该命令用包含冒号的错误消息污染了它。我在Makefile中找到了它 MAPS+=reverse/db.901:550:2001.ip6.arpa lastserial: ${MAPS}

我的makefile失败,错误为:

Makefile:34: *** multiple target patterns.  Stop.
这到底意味着什么,我该如何解决这个问题

(,由船长写的,显然没有帮助)


找到了。我在形式上有规则:

$(FOO): bar

其中,
FOO
是通过shell命令设置的,该命令用包含冒号的错误消息污染了它。

我在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} --------通知 / / v v 映射+=反向/db.901 \:550 \:2001.ip6.arpa lastserial:${MAPS} ./updateser${MAPS}
除了必须像最初的答案那样避开冒号外,我还发现如果缩进消失了,你可能会遇到同样的问题。在一个makefile中,我必须用一个制表符替换空格,这使我能够克服错误。

我只想补充一点,如果您因为使用Cygwin make和 自动生成的文件,您可以使用以下sed修复它

sed-e的@\\\([^]\)@/\1@g'-e's@[cC]:@/cygdrive/c@'-i filename.d
您可能需要在中的转义列表中添加更多字符,而不仅仅是空格 第一次替换,但你明白了。这里的概念是/cygdrive/c是 c的别名:cygwin的品牌可以识别

还不如扔进去

-e's@^\+@\t@'
以防万一,你确实是从《意外》中的空格开始的(尽管我/认为/这会
通常是“缺少分隔符”错误。

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

我遇到了相同的错误。 经过努力,我发现这是由于文件夹名中的“空格”

例如:

以前我的文件夹名是: “Qt项目”

后来我把它改成: “QT项目”

我的问题解决了


这很简单,但有时是个大问题。

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

将Makefile设置为仅使用选项卡修复了此错误。

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

双击“多目标模式”错误后,显示了
.ld
文件的路径。这是另一个“非法角色”问题。冒犯的角色是(等等):=

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


谷歌没有明确地记录这一点。

有帮助吗?一个快速的谷歌揭示,这些答案只是对“你有多个目标模式”的解释。嗯,我想我没有。我怎么检查?什么能触发它?需要什么预防措施来防止这个问题?一切都正常工作了一分钟,然后我的脚本打喷嚏出一个(分号)冒号。。。嘿嘿。在我找到你和@mcr的答案之前,我花了至少3个小时努力寻找这个问题。你刚刚帮我省了一桶汗!!这个问题的真正根本原因是GNU Make是一块可怕的粪便,应该在几十年前就死了。我也有同样的问题,但我不明白你的答案,你能为我进一步解释一下吗,@PirFahimShah答案是文件名(db.901:550:2001.ip6.arpa)中的冒号需要转义。mcr通过在冒号前面加反斜杠来逃避冒号。这样,make就不会把冒号理解为一种特殊的符号。谢谢,它对我很有用。在一个Makefile规则中,我有一些带有冒号的旧windows路径(
C:/Qt/5.8/mingw53_32/bin/rcc.exe
)。如果您正在Linux机器上构建Windows make切换到wsl(ubuntu)并出现此错误,请删除这些自动生成的make文件,
make clean
,然后
make
解决了此问题。错误的行是
\u build/nrf52840\u xxaa/app\u mpu.c.o:../../../../app\u mpu.c\
GNU make在这种情况下也可能报告“无目标规则”。