gnu使配方/目标写成%不工作

时间:2012-09-25 21:40:40

标签: makefile gnu gnu-make

使用GNU Make 3.81

我得到的错误是:

  

make:没有规则要制作“unittest / build / inMessages.o”目标,“unittest / build / xlineunittestrunner”需要。停止。

我将目标写在makefile中:

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

如果我将%$(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 $@

3 个答案:

答案 0 :(得分:0)

%替换为inMessages时,它会将隐式模式规则转换为显式规则。显式规则优先于隐式模式规则。必须有另一个模式规则产生%.o

我会尝试使用-d -p运行make并查看哪些规则匹配。如果不使用内置隐式模式规则,-r开关也可能很有用。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

做以下改变它会起作用

  

%。o:%。c:

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

逻辑是$(BUILDDIR)/%。o和$(BUILDDIR)/ $ @是相同的。

如果你不能改变配方的目标:)