一般,在开发测试阶段用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 CXXFLAGS = -c -g -Ddebug 6 else 7 ALL: test_r 8 CXXFLAGS = -c -O3 9 endif 10 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_r
debug版本编译选项是"-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转载请注明出处http://www.cnblogs.com/caosiyang/archive/2012/06/13/2548051.html
相关推荐
### Debug 和 Release 编译方式的本质区别 #### 一、Debug与Release编译方式概述 在软件开发领域,为了确保程序质量与效率,通常会采用两种不同的编译配置:Debug模式与Release模式。这两种模式各自拥有不同的编译...
- 编译完成后,你需要分别编译Debug和Release版本。为此,可以运行`jom debug`和`jom release`或`nmake -f Makefile debug`和`nmake -f Makefile release`。 4. **解决MP4播放问题**:在编译过程中,可能会遇到...
指定 DEBUG=1 编译debug版本,默认是release版本。 同理,如果intl不需要iconv,请修改上面的配置文件选项,并, 删掉Makefile.mak中/DDEPENDS_ON_LIBICONV=1 配置文件的制作,参考了以下几处,修改的大概原则是,...
Makefile 的主要作用是根据源代码文件生成目标文件,实现自动化编译和链接的过程。 Makefile 的基本概念 Makefile 由一系列的规则组成,每条规则都定义了如何生成一个目标文件。规则的基本结构如下所示: target:...
指定 DEBUG=1 编译debug版本,默认是release版本。 同理,如果intl不需要iconv,请修改上面的配置文件选项,并, 删掉Makefile.mak中/DDEPENDS_ON_LIBICONV=1 配置文件的制作,参考了以下几处,修改的大概原则是,...
3. **Makefile编译**: - **目标编译**:Makefile定义了编译规则,包括源文件、头文件、编译选项、链接步骤等,使得编译过程自动化。 - **编译环境**:嵌入式开发往往需要指定交叉编译工具链,如`CC=arm-linux-gcc...
例如,可以为不同的构建类型(如debug和release)定义特定的目标和依赖关系。 #### 4. 实践案例 **4.1 实例一:多模块项目** 在一个包含多个模块的项目中,每个模块都有自己的源文件和头文件。这种情况下,可以...
- **`ifeq`**:条件判断内核版本,选择包含不同的 Makefile 文件。 #### 4. 示例代码分析:fie8180 平台 vcap 下 Makefile 最后给出一个具体的示例 Makefile,用于 fie8180 平台上的 vcap 模块: ```makefile ...
4. 处理条件和配置:考虑 Debug 和 Release 构建配置,确保 `Makefile` 能处理这些差异。 5. 平台兼容性:转换后的 `Makefile` 应该能够在不同操作系统上工作,例如支持 Windows 和 Linux 的编译工具链。 转换后的 ...
根据你的需求,例如选择编译模式(release或debug)、选择编译目标(桌面或移动平台)等,运行这个脚本。 5. **编译源代码**:使用MinGW-w64的`qmake`命令生成Makefile,然后通过`make`命令进行编译。编译过程可能...
“nanomsg1.1.4 vs2015 编译, debug及release 的lib和dll文件”这部分描述说明了编译的目标包括为调试(debug)和发布(release)两种配置生成对应的库文件(lib)和动态链接库文件(dll)。lib文件是静态库,它们在...
#### 四、Linux 2.6下Makefile编译环境搭建 在Linux 2.6环境下,Makefile文件的编写需要注意以下几点: 1. **内核模块编译**:在2.6内核中,模块文件的后缀名由`.o`改为`.ko`,这主要是为了实现模块接口的标准化,...
.PHONY: debug release debug: CFLAGS += -DDEBUG ``` ##### 6.11 模式指定变量 - 变量可以为特定的文件模式定义。 - 示例: ```makefile %.o: %.c CFLAGS += -I$(INCLUDE_DIR) ``` #### 七、Makefile的...
Android平台的编译系统基于Linux下的Makefile原理,并结合了Google开发的编译工具和技术。Android编译系统使用了一套专门的编译工具,包括Java编译器、Android Asset Packaging Tool (AAPT)、Android NDK等。 一、...
例如,可以设置不同的编译配置(Debug或Release),或者根据特定条件执行不同的命令。 总之,理解并熟练使用makefile是成为一名专业程序员的必要技能,尤其是在Unix/Linux开发环境中。通过编写高效的makefile,...
- **配置传递**: Conan 可以根据不同的构建配置(如 Release 或 Debug),设置环境变量传递给 Makefile,确保正确构建。 - **跨平台兼容**: 通过 Conan 管理依赖,可以确保在不同平台上构建时,依赖项的版本和配置...
### 深入浅出Makefile #### 一、从helloworld开始 在开始学习Makefile之前,我们首先通过一个最简单的程序——...通过合理地组织和编写Makefile,可以实现对项目编译过程的高度自动化,从而节省大量时间和精力。
- 通用Makefile适用于多种项目,通常包含多种编译模式,如debug和release,以及针对不同平台的兼容性处理。 9. **示例中的Makefile**: - "general_Makefile_usage"这个示例可能包含了如何定义源代码目录,如何...
智能自动化Makefile可以完成如下工作: *自动获去操作系统类型并指定为...*智能控制debug和release版本的编译 *自动给出使用帮助信息 详细信息请参见:http://www-etud.iro.umontreal.ca/~petitg/cpp/makefile.html