linux下debug与release编译的方法
2012-07-29 23:33
1161 查看
如果是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
一般,在开发测试阶段用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
相关文章推荐
- linux下debug与release编译的方法
- 让一个动态链接库文件debug和release编译的时候生成不同的文件名的方法
- GCC的DEBUG和release版本编译方法
- android jni编译配置DEBUG or RELEASE 的方法和优先级
- vs中debug和release版本的同时编译方法
- 如何将请求参数赋值给方法参数---java的debug和release编译方式
- Linux下查看.so和可执行文件是否debug编译的方法(必看)
- Windows环境下编译生成libpq类库(Debug和Release)
- ATL编译时只能用debug编译的解决方法
- linux 编译kernel与svn版本冲突解决方法 [drivers/gpu/mali/mali/common/mali_kernel_core.o] 错误 1
- 程序Debuge版本编译通过,Release版本出现链接错误,解决办法
- G++ 编译 C++ 方法以及 Linux 编程环境
- 安装交叉编译工具,执行arm-linux-gcc –v命令出现提示找不到该文件或目录?解决方法
- qmake编译选项的控制(debug|release)
- ios5 xcode 4.2 中 release 显示编译警告或错误的解决方法
- fedora14 编译arm Linux make menuconfig error处理方法
- Linux系统平台下关于GCC编译及使用的方法 (-Werror,它要求GCC将所有的警告当成错误进行处理
- 关于arm-linux-gcc交叉编译工具链,实现自己的crt0或者编译UBOOT出现undefined reference to `__aeabi_unwind_cpp_pr0'的解决方法
- 编译升级linux由2.4.20-8到2.6.10内核时,遇到的错误,以及解决方法
- 精简Linux内核编译的简单方法