刚学cmake,很多东西还不是很懂,不过今天刚刚实现了通过CMake控制debug的开关,兴奋之余记录一下。

背景介绍:

最近参与到了一个大的C++项目,很多代码已经非常成熟,我来添加一些辅助功能,但是源代码中没有预留debug的接口。为了不影响现有代码的结构,我想通过宏定义的方式添加DEBUG控制。原本以为#DEFINE DEBUG只能在.h或.cc文件中定义,后来经人点播才知道#IFDEF DEBUG的精髓是通过cmake来实现。

具体步骤:

首先,我在src代码里编写了若干debug的输出:

#IFDEF DEBUG

    some print command;

#ENDIF

然后,在Cmakefile中添加DEBUG的定义:

IF (CMAKE_BUILD_TYPE STREQUAL Debug)        用IF控制,可以实现Release版本不输出debug信息
ADD_DEFINITIONS(-DDEBUG) 不知道为什么DEBUG必须写成-DDEBUG,谁来解释一下吧
ENDIF()

最后,在cmake的命令中设置build种类为Debug:

$ cmake ../src -DCMAKE_BUILD_TYPE=Debug

$ make

这样再运行可执行文件时就会执行some print command等debug信息了。如果不想看到debug信息,只需将Debug改为Release即可:

$ cmake ../src -DCMAKE_BUILD_TYPE=Release

c++通过CMake实现debug开关的更多相关文章

  1. 通过暗码去打开/关闭usb debug开关

    通过暗码去打开/关闭usb debug开关 通过暗码去打开/关闭usb debug开关1. Description2. Analysis3. Solution4. Summary 1. Descrip ...

  2. cmake编译Debug和Release

    CMake 中有一个变量 CMAKE_BUILD_TYPE ,可以的取值是 Debug Release Rel WithDebInfo 和 MinSizeRel.当这个变量值为 Debug 的时候,C ...

  3. Cmake 实现debug和release lib依赖项处理

    一.说明 最近用cmake开发东西,编译vs时候,发现debug和release版本的lib库的依赖项问题,故此小结一下.若有不对之处,还请看官多多指教. 使用的工程有自己编写的工程,也有借用第三方库 ...

  4. 小记录:flask的DEBUG开关

    请求站点的如下位置: http://www.ahfu.com/ahfuzhang/?debugger=yes&cmd=resource&f=style.css 居然正常范围了CSS文件 ...

  5. CMake添加debug版本后缀

  6. CMAKE的用法

    一.      基本使用 安装:下载二进制包后可直接解压使用 从源码安装则执行命令:./bootstrap; make; make install——尝试执行bootstrap失败 使用:cmake ...

  7. CMAKE的使用

    CMAKE的使用 Version 1.0 2009-3-18 一.      基本使用 安装:下载二进制包后可直接解压使用 从源码安装则执行命令:./bootstrap; make; make ins ...

  8. CMake简介

    目录 一.CMake简介 二.CMake典型示例 源代码 demo.cpp cmake脚本 CMakeLists.txt 编译流程 三.CMake常用命令 常用命令介绍 设置编译目标类型 指定编译包含 ...

  9. [转] CMake

    转载地址:https://www.cnblogs.com/lidabo/p/7359422.html cmake 简介 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装( ...

随机推荐

  1. java struts jxl 导入导出Excel(无模板)

    jar包: import javax.servlet.http.HttpServletResponse; import java.io.OutputStream; import java.io.Fil ...

  2. cojs 1001. [WZOI2011 S3] 消息传递

    1001. [WZOI2011 S3] 消息传递 ★★   输入文件:messagew.in   输出文件:messagew.out   简单对比时间限制:1 s   内存限制:128 MB Prob ...

  3. 2.eclipse 插件安装烦死人(1)

    嫌公司用的eclipse不爽,准备自己弄一个,diy的,没想到装插得烦死人. 诱惑人的“常用插件”: (1)    AmaterasUML        介绍:Eclipse的UML插件,支持UML活 ...

  4. LeetCode——Regular Expression Matching

    Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...

  5. 8-2 canvas专题-线条样式

    8-2 canvas专题-线条样式 学习要点 对第五章知识进行简单的回顾和总结 进一步讲解canvas绘图相关的知识点 第八章内容介绍 在第八章中我们将对以前的知识进行简单的回顾,着重对canvas绘 ...

  6. oracle 统计/分析函数

    Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行. 语法: Sql代码 <analytic ...

  7. RAR去除广告

    现在注册已经不能去掉广告了,给你一个100%有效的办法(##此教程已更新,最新的winrar5.5同样适用,但是多了一个步骤) 电脑桌面新建一个txt文件,重命名为“rarreg.key” 2. 将. ...

  8. Eclipse出现Class Not Found异常时可以参考我所知道的一个方案

    如过你出现Class Not Found异常,可以参考以下这个解决方案 打开Properties for projectName面板-->Deploment Assembly--:查看有没有缺失 ...

  9. bzoj 1706: [usaco2007 Nov]relays 奶牛接力跑【矩阵乘法+Floyd】

    唔不知道怎么说--大概核心是把矩阵快速幂的乘法部分变成了Floyd一样的东西,非常之神 首先把点离散一下,最多有200个,然后建立邻接矩阵,a[u][v]为(u,v)之间的距离,没路就是inf 然后注 ...

  10. 认识BACnet协议

    一.什么是BACnet? BACnet,Building Automation and Control networks的简称,即楼宇自动化与控制网络.是用于智能建筑的通信协议. 一般楼宇自控设备从功 ...