使用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 $@
答案 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)/ $ @是相同的。
如果你不能改变配方的目标:)