如果是DEBUG,则加参数-Ddebug,release'版本则不加该参数。
一般,在开发测试阶段用debug版本,而上线发布用release版本。
使用Makefile定制编译不同版本,避免修改程序和Makefile文件,将会十分方便。
读了一些资料,找到一个解决方法,Makefile预定义宏与条件判断,结合make预定义变量,进
行条件编译。 比如,
有一个test.cpp,
包含这段代码
#ifdef debug//your code #endif你
希望在debug版本要执行它,在release版本不执行。
我们可以写这样的一个Makefile:
1 ver = debug 2 3 ifeq ($(ver), debug) 4 ALL: test_d 5 CXX FLAGS = -c -g -Ddebug 6 else 7 ALL: test_r 8 CXXFLAGS = -c -O3 9 endif10 11 test_d: test.do 12 g++ -o $@ $^ 13 14 test_r: test.ro 15 g++ -o $@ $^ 16 17 %.do: %.cpp 18 g++ $(CXXFLAGS) $< -o $@ 19 20 %.ro: %.cpp 21 g++ $(CXXFLAGS) $< -o $@
简单说一下,Makefile根据ver的不同定义了不同的编译选项CXXFLAGS与输出程序ALL,debug版本输出程序是test_d,release版本输出程序是test_rdebug版本编译选项是"-c -g -Ddebug",release版本编译选项是"-c -O3"debug版本object文件后缀是".do",release版本object文件后缀是".ro"debug版本编译选项使用"-D"定义宏debug,使得your code能够执行。不同版本的编译选项、object文件、输出程序均不同,所以可以同时编译两个版本的程序,互不影响。 Makefile执行时,首先判断ver变量,如果ver的值是debug,编译debug版,否则编译release版。当然,默认情况下是编译debug版的。如果想编译release版,要怎么做?只要在执行make时,对ver变量赋值,使得ver的值不为debug,比如# make ver=release