0

我目前正在编写一个能够编译不同目标(如调试、开发、发布)的生成文件。链接和编译规则如下所示:

$(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 吗?

我使用GNU Make 3.82.90MinGW。

4

1 回答 1

1

这里没有足够的信息来说明它为什么不起作用。如果你确定你有一个文件src/Main.cpp,那么 make 应该选择那个规则。cpp 文件是源文件还是生成文件?如果它是生成的,那么真正的问题可能在更低的位置,即生成发生的地方。您可以尝试使用make -d来查看 make 正在做什么以及它为什么不喜欢这个规则。

于 2013-03-18T13:13:27.477 回答