【发布时间】:2020-12-06 01:48:36
【问题描述】:
自大学以来,我一直无法让模式规则为我工作。我完全按照这些例子所说的去做,但它永远不会奏效。我得到的只是错误:
make: *** No rule to make target '<whatever>.o', needed by 'all'. Stop.
这是我当前的制作文件:
all: test clean
test : $(ODIR)/weight_nodeTest.o
$(LINK) $(RUN)/$@ $^
$(ODIR)/%.o : $(TEST)/%.cpp $(SRC)/%.h
$(COMPILE) $(ODIR)/$@ $^
clean :
rm -f $(RUN)/*
rm -f $(ODIR)/*
当我输入特定文件而不是通配符时,它可以完美运行。谁能告诉我我做错了什么??
【问题讨论】:
-
“自大学以来,我一直无法让模式规则发挥作用”。这太相关了。
-
为什么
all依赖于clean?此外,$@已经包含目录,因此通常不应以 1 为前缀。 -
如果
<whatever>.o没有规则,那是因为您的模式规则不匹配。让我们看看可能的原因。您的模式规则中有 3 个术语。<whatever>.o是否匹配$(ODIR)/%.o?如果是的话,你能告诉我们真正的<whatever>.o吗?接下来,有没有真正对应的$(TEST)/%.cpp和$(SRC)/%.h?你能告诉我们吗?你能创建一个MCVE吗?