Makefile &引用;“多目标模式”;生成文件错误
我的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: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在这种情况下也可能报告“无目标规则”。