C++ 使用GCC make管理调试和发布版本

C++ 使用GCC make管理调试和发布版本,c++,gcc,makefile,gnu,C++,Gcc,Makefile,Gnu,我正在尝试管理同一应用程序的两个不同版本。我有两个单独的make文件,一个用于调试,一个用于发布,它们都使用相同的源代码。我还有wrapper.bat文件,其中包含要传递以生成的参数以及其他内容。这其中的要点是,我希望能够同时保留我的对象文件,以减少编译时间 我尝试将对象文件的扩展名更改为.od(与通常的.o)但make不太喜欢这样。我不知道如何将这些对象放在一个单独的目录中,或者可能在文件名中附加一个d 这通常是如何实现的?Make有内置的规则用于构建.o文件和各种其他类型的文件。但是,如果您

我正在尝试管理同一应用程序的两个不同版本。我有两个单独的make文件,一个用于调试,一个用于发布,它们都使用相同的源代码。我还有wrapper.bat文件,其中包含要传递以生成的参数以及其他内容。这其中的要点是,我希望能够同时保留我的对象文件,以减少编译时间


我尝试将对象文件的扩展名更改为
.od
(与通常的
.o
)但make不太喜欢这样。我不知道如何将这些对象放在一个单独的目录中,或者可能在文件名中附加一个d


这通常是如何实现的?

Make有内置的规则用于构建
.o
文件和各种其他类型的文件。但是,如果您想让it使用不同的非标准扩展来构建目标,您必须自己创建该规则:它不是内置的

幸运的是,这很微不足道。要创建从
.cpp
文件(例如)生成
.od
文件的规则,您只需编写:

%.od : %.cpp
        $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(DEBUG_CXXFLAGS) -o $@ -c $<
%.od:%.cpp
$(CXX)$(CPPFLAGS)$(CXXFLAGS)$(DEBUG_CXXFLAGS)-o$@-c$<

我在这里添加了
DEBUG\u CFLAGS
,但是你可以使用任何你喜欢的东西。

“make不太喜欢那样”-确切的意思是什么?如果你不断地改变,这应该不会是一个问题。你是在自己写makefile,还是在用生成器?我都是手工写的。我的意思是make不知道生成对象文件的规则。将扩展名改回
.o
修复了该问题,但使调试和发布对象文件具有相同的名称。啊,好的,谢谢。我使用了
.cpp.o:
规则,这可能是我出错的地方。这将从
.cpp
构建
.o
。如果您想从
.cpp
构建
.od
,那么
.cpp.o
显然对您没有帮助。我上面提供的模式规则语法将与GNU make一起使用,但是如果必须使用其他版本的make,它将无法工作。