制作,静态模式规则的语法,错误" ***目标模式不包含'%'。停止。 "

时间:2015-08-20 18:09:19

标签: makefile

我正在尝试从源代码构建mysql-workbench(对于32位Fedora 22)。 经过多次尝试和修复,我收到以下错误:

plugins/migration/CMakeFiles/wbcopytables-bin.dir/build.make:163: *** target pattern contains no '%'.  Stop.

行build.make:163是

plugins/migration/wbcopytables-bin: /bin/sh:\ /root/linux-res-6.3/usr/bin/iodbc-config:\ No\ such\ file\ or\ directory

你是否看到任何拼写错误,关于Make及其Static Pattern Rules的语法?或者我是在完全错误的轨道上?

另外,有没有办法检查第163行的修正而不构建整个.rpm(花费近1小时)?

米。

1 个答案:

答案 0 :(得分:1)

由于问题中没有给出足够的信息,所以给出了这样的答案,理由是它很容易以似乎模仿168中的第168行的方式重现错误信息。

给定一个包含构造的 Makefile

this: that: somethingelse:
        echo the stuff

问题结果中的错误消息:

$ make this
Makefile:1: *** target pattern contains no `%'.  Stop

此外,由于第168行:

plugins/migration/wbcopytables-bin: /bin/sh:\ /root/linux-res-6.3/usr/bin/iodbc-config:\ No\ such\ file\ or\ directory

看起来非常像:

this: that: somethingelse:

build.make 似乎是由遇到错误和输出的某个脚本生成的:

/bin/sh: /root/linux-res-6.3/usr/bin/iodbc-config: No such file or directory

进一步看来,所述脚本可能由于某种原因将 stderr 重定向到 stdout 或者用于生成 build.make ,结果是生成的文件损坏而产生此错误。

当然,所有这些都预示着很多,这个问题提供的上下文信息太少,但肯定这种解释似乎是合理的。

在一个真正的 Makefile 中,人们可以通过删除除最终目标名称以外的所有冒号来纠正这种情况,但OP的文件显然已被泄露,因为错误信息是最不可能的。打算成为目标名称。