我目前正在编写一个能够编译不同目标的makefile(如Debug,Development,Release)。链接和编译规则如下所示:
$(DEVELOPMENT_OUT): $(subst rep,development,$(OBJS))
g++ -o $(DEVELOPMENT_OUT) $(subst rep,development,$(OBJS))
obj/development/%.o: src/%.cpp
g++ -c -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
现在,我得到了这个输出:
make: *** No rule to make target 'obj/development/Main.o', needed by 'bin/Development.exe'. Stop.
但是模式规则不应该适用于Main.o吗?
我使用MinGW的GNU Make 3.82.90
。
答案 0 :(得分:1)
这里没有足够的信息说明为什么它不起作用。如果您确定自己有文件src/Main.cpp
,那么make应该选择该规则。 cpp文件是源文件还是生成的文件?如果它生成了那么可能真正的问题是降低,生成发生的地方。您可以尝试使用make -d
查看制作的内容以及不喜欢此规则的原因。