构建开源项目时遇到错误:
make subdir=manual -C manual ..=../ subdir_lib
Makefile:235: *** mixed implicit and normal rules. Stop.
Makefile第235行的代码如下:
235: $(objpfx)stubs ../po/manual.pot $(objpfx)stamp%:
236: $(make-target-directory)
237: touch $@
答案 0 :(得分:14)
当你看起来像模式规则输出(包含%
)以及看起来像普通输出(没有%
)的东西时,GNU make会打印该错误消息规则声明中:
的左侧。例如:
%.pat normal:
@echo $@
因此,在Makefile的第235行,您已经设法将构成的“看起来像”的东西组合在一起。为避免错误,请修复该声明,最有可能将其拆分为两个:
%.pat:
@echo $@
normal:
@echo $@
如果没有看到产生此错误的完整makefile,我们可以提供更多建议。
答案 1 :(得分:14)
我在这里提醒继任者,检查你的路径,其中是否有空间? 我们整个下午都浪费了!
答案 2 :(得分:7)
在我的情况下,错误是由于愚蠢地放置了一个无关的:在依赖行的末尾:
%.o: %.cpp:
g++ -c -o %@ $<
答案 3 :(得分:2)
此问题中已描述此问题中描述的问题 http://sourceware.org/bugzilla/show_bug.cgi?id=11873
修正案确实是按照Eric的建议拆分规则。
答案 4 :(得分:1)
刚刚拥有这个,这是因为&#34; /&#34;之后的隐藏空间。在变量定义中,即
#accidental/invisible space left after the final "/" i.e...
DESTDIR=path/to/the/destination/directory/
# ...just here ^
#rule to make copies of text files...
$(DESTDIR)%.txt:$(SRCDIR)%.txt
答案 5 :(得分:0)
完成Eric Melski答案,您可以这样做以避免在各处重复编写代码:
define DEFAULTTARGET :=
@echo $@
endef
%.pat:
${DEFAULTTARGET}
normal:
${DEFAULTTARGET}
答案 6 :(得分:0)
检查您的路径,检查您保存项目的位置,目录名称中不应有空格。如果您是从其他来源导入的,请将其与系统生成的项目目录文件一起保存