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