【发布时间】:2012-09-17 11:21:35
【问题描述】:
使用 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 中),它可以工作。我不确定为什么 % 不匹配 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 $@
【问题讨论】:
-
您确定 makefile 中没有其他内容可能会干扰模式规则吗?可能需要
inMessages中不存在的其他依赖项,例如$(BUILDDIR)/%.o: %.h? -
另外,这个规则是如何被调用的?您是直接输入
make并让 Make 选择 Makefile 中的第一条规则,还是输入make something? -
它被调用为
make all。让所有调用,如果 /build 不存在,checkdirs 只会创建它。 Target 首先检查目标文件,然后检查 .c 文件并构建目标文件,最后链接可执行文件。不知何故,我的 object/c 文件的目标搞砸了,而不是模式匹配......