0

使用 GNU Make 3.81

我得到的错误是:

制作:没有规则来制作“unittest/build/xlineunittestrunner”所需的目标“unittest/build/inMessages.o”。停止。

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

$(BUILDDIR)/%.o: %.c
  $(CC) $(INCLUDES) $(DEFINES) -c $< -o $@

如果我将%(in $(BUILDDIR)/%.o: %.c)替换为inMessages,它可以工作。我不确定为什么%不匹配inMessages

编辑:

我认为问题不在于有其他规则匹配 .o 文件。以下是 makefile 中的完整规则列表:

all: printinfo checkdirs $(BUILDDIR)/xlineunittestrunner

printinfo:
  @echo "SRCS = $(SRCS)" 
  @echo "OBJ  = $(OBJ)"
  @echo "SOURCEDIRS = $(SOURCEDIRS)" 
  @echo "OBJECTS    = $(OBJECTS)"
  @echo "OBJECTSTOBUILD = $(OBJECTSTOBUILD)"
  @echo "BUILDDIR = $(BUILDDIR)"  

$(BUILDDIR)/xlineunittestrunner: $(OBJECTSTOBUILD)
  $(CC) -o $@ -c $^

$(BUILDDIR)/%.o: %.c
  $(CC) $(INCLUDES) $(DEFINES) -c $< -o $@

checkdirs: $(BUILDDIR)

$(BUILDDIR):
  @mkdir -p $@
4

3 回答 3

0

当您%inMessages它替换时,会将隐式模式规则变成显式规则。显式规则优先于隐式模式规则。一定是有另一个模式规则产生%.o.

我会尝试运行 make with-d -p并查看匹配的规则。-r如果您不使用内置的隐式模式规则,switch 也可能对禁用它们很有用。

于 2012-09-26T09:21:41.057 回答
0

做下面的改变它会起作用

%.o: %.c:

      $(CC) $(INCLUDES) $(DEFINES) -c $< -o $(BUILDDIR)/$@

逻辑是 $(BUILDDIR)/%.o 和 $(BUILDDIR)/$@ 是一样的。

如果你不能有针对性地改变食谱:)

于 2013-09-16T05:48:05.470 回答
0

啊。问题是在将 sourcedirs 添加到 VPATH 时出现(额外字符)错字。模式匹配工作正常,只是找不到任何源代码文件。

于 2012-09-26T15:35:19.517 回答