Makefile gnu使用%编写配方/目标不工作
使用GNU Make 3.81 我得到的错误是: make:没有规则将目标设置为“unittest/build/xlineunittestrunner”所需的“unittest/build/inMessages.o”。停下来 我将目标写入makefile中,如下所示:Makefile gnu使用%编写配方/目标不工作,makefile,gnu,gnu-make,Makefile,Gnu,Gnu Make,使用GNU Make 3.81 我得到的错误是: make:没有规则将目标设置为“unittest/build/xlineunittestrunner”所需的“unittest/build/inMessages.o”。停下来 我将目标写入makefile中,如下所示: $(BUILDDIR)/%.o: %.c $(CC) $(INCLUDES) $(DEFINES) -c $< -o $@ 当您将%替换为inMessages时,它将隐式模式规则转换为显式规则。显式规则优先于隐式模式规
$(BUILDDIR)/%.o: %.c
$(CC) $(INCLUDES) $(DEFINES) -c $< -o $@
当您将
%
替换为inMessages
时,它将隐式模式规则转换为显式规则。显式规则优先于隐式模式规则。一定是有另一个模式规则生成了%.o
我会尝试使用
-d-p
运行make,看看哪个规则匹配。另外,如果不使用内置隐式模式规则,则-r
开关可能有助于禁用它们。。问题是将SourceDir添加到VPATH时出现了(额外字符)输入错误。模式匹配正在工作,它只是找不到任何源代码文件。执行以下更改它将工作
%.o:%.c:
$(CC) $(INCLUDES) $(DEFINES) -c $< -o $(BUILDDIR)/$@
$(CC)$(包括)$(定义)-c$<-o$(BUILDDIR)/$@
逻辑是$(BUILDDIR)/%.o和$(BUILDDIR)/$@是相同的
如果无法更改配方:)是否确定makefile中没有其他内容会干扰模式规则?可能是调用了在消息中不存在的其他依赖项,比如
$(BUILDDIR)/%.o:%.h
?另外,如何调用此规则?您是键入make
并让make在Makefile中选择第一条规则,还是键入make something
?它被调用为make all
。进行所有调用,如果没有,checkdirs只创建/构建。目标首先检查目标文件,然后检查.c文件并生成目标文件,最后链接可执行文件。不知何故,我的object/c文件目标是混乱的,没有模式匹配……我不同意。如果有另一个模式规则的prereq存在(或者可以生成),那么Make可能会运行该规则而不是这个规则;如果该其他规则的prereq不存在(并且无法生成),则Make将运行此规则。不管怎样,我们都不会得到这个错误。
$(CC) $(INCLUDES) $(DEFINES) -c $< -o $(BUILDDIR)/$@