刚学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

最新文章

  1. BZOJ 1305: [CQOI2009]dance跳舞 二分+最大流
  2. JavaScript:内存泄露、性能调优
  3. SQL联合查询(内联、左联、右联、全联)的语法
  4. Android模拟器连接本李服务器localhost
  5. switch结构的用法
  6. AttributeError: 'NoneType' object has no attribute 'bytes' python3.4 win64
  7. [extjs] ExtJS4 treepanel 子节点选中父节点自动选中,选中父节点 子节点自动全部选中
  8. Geodatabase介绍
  9. 4 Java学习之 反射Reflection
  10. JBPM4实例教程
  11. FusionCharts使用问题及解决方法(四)-FusionCharts常见问题大全
  12. 第十二章:Python の 网络编程进阶(一)
  13. js获取不带单位的像素值
  14. mui列表系列
  15. WebViewJavascriptBridge浅析
  16. python 常见异常
  17. ES6知识整理(5)--对象的扩展
  18. jdk,jre和jvm
  19. Delphi 与 Word_VBA
  20. 50家硅谷IT公司技术博客

热门文章

  1. https://security.stackexchange.com/questions/68405/what-is-tmunblock-cgi-and-can-it-be-exploited-by-shellshock-linux-apache-w
  2. Jenkins重启 在Windows GUI上
  3. Ubuntu14.04 x64 zabbix 3.0 安装
  4. 【Silverlight】Bing Maps学习系列(三):如何控制地图
  5. mac系统下的常用命令
  6. BZOJ_4753_[Jsoi2016]最佳团体_树形背包+01分数规划
  7. gitweb
  8. div标签的闭合检查
  9. 4-3 买家类目-service
  10. DNS的主从、子域授权和转发服务器