我的makefile因错误而失败:
Makefile:34: *** multiple target patterns. Stop.
这究竟是什么意思,我该如何解决这个问题?
(GNU make manual,由船长Obvious写的,没有帮助。)
找到它。我有形式的规则:
$(FOO): bar
其中FOO
是从shell命令设置的,它使用包含冒号的错误消息对其进行污染。
答案 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并未对此进行明确记录。