Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile gnu使用%编写配方/目标不工作_Makefile_Gnu_Gnu Make - Fatal编程技术网

Makefile gnu使用%编写配方/目标不工作

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时,它将隐式模式规则转换为显式规则。显式规则优先于隐式模式规

使用GNU Make 3.81

我得到的错误是:

make:没有规则将目标设置为“unittest/build/xlineunittestrunner”所需的“unittest/build/inMessages.o”。停下来

我将目标写入makefile中,如下所示:

$(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)/$@