autoconf生成的编译选项默认是"-g -O2"。这个"-g"选项将我迷惑了,以为生成了GDB调试所需的信息,所以也就没有管后面的"-O2“选项。

 
实际上在用GDB进行调试的时候,单步跟踪代码,GDB显示的代码非常混乱。要么某些代码行未显示,要么中间插入了很多看起来像库函数的代码。甚至有时检查变量值都不对,但是根据此变量生成的后续结果却是正确的。
 
查看GCC文档,发现-g与-O选项虽然允许同时使用,但是会产生"surprise”的结果。
 
为了方便开发阶段的调试工作,需要给autoconf添加一个调试选项来控制其生成的编译选项。这可以通过在configure.ac中使用AC_ARG_ENABLE宏来实现。
 
AC_ARG_ENABLE宏的格式为:
AC_ARG_ENABLE(feature, help-string, [action-if-given], [action-if-not-given])
 
在configure.ac中添加如下配置:
# enable debug or not
AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug], [enable DEBUG mode(default=no)]),
[],
[enable_debug=no])
AS_IF([test "x$enable_debug" = "xyes"], [CXXFLAGS="-g2 -O0 -DDEBUG -Wall"],
[test "x$enable_debug" = "xno"], [CXXFLAGS="-O2 -Wall"],
[])
上述配置的意思是:给最后生成的configure脚本添加一个--enable-debug选项,如果指定了此选项,则CXXFLAGS="-g2 -O0 -DDEBUG -Wall",否则CXXFLAGS="-O2 -Wall"。
 
每一个enable选项都有一个enable_feature变量与之对应,可以通过此变量取得用户指定的值。以上面的场景为例:
(1)如果指定--enable-debug,不带参数,则enable_debug变量值为"yes"。
(2)如果指定--enable-debug=no,则enable_debug变量值为"no"。
(3)如果指定--disable-debug,则与--enable-debug=no效果相同。
 
AS_IF宏与C语言中的if语句功能相似,格式为:
AS_IF (test1, [run-if-true1], . . . , [run-if-false])
例:
AS_IF([test "x$foo" = xyes], [HANDLE_FOO([yes])],
[test "x$foo" != xno], [HANDLE_FOO([maybe])],
[echo foo not specified])
AS_IF的行为是:首先检查第一个条件,如果成立,执行相应操作;如果第一个条件不成立,继续检查下一个条件;如果所有条件都不成立,则执行run-if-false
 
添加了debug选项以后,执行./configure --help可以看到我们指定的文档字串:
--enable-debug          enable debug mode(default=no)

这样我们就可以通过configure的选项来控制编译出的可执行文件是否带有调试信息了。

最新文章

  1. Why many EEG researchers choose only midline electrodes for data analysis EEG分析为何多用中轴线电极
  2. iOS开发UI篇—UITabBarController简单介绍
  3. 查看外网出口IP && Traceroute
  4. 进入做Mvc项目的时候 返现某个文件夹下面css js png等静态文件都访问不了
  5. Android简易数据存储之SharedPreferences
  6. jmeter随笔(3)-从csv中获取带引号的数据详情
  7. React Native分析(index.ios.js)
  8. cf div2 236 D
  9. homework-09
  10. Codeforces Round #319 (Div. 1) C. Points on Plane 分块
  11. Jordan Lecture Note-2: Maximal Margin Classifier
  12. 转:ElasticSearch 插件安装
  13. 老李分享:jvm结构简介 2
  14. CentOS7安装使用Docker
  15. font-spider利器对webfont网页字体压缩使用
  16. less用法小结
  17. Christmas Spruce
  18. 【深度学习】BP反向传播算法Python简单实现
  19. vue-webpack项目本地开发环境设置代理解决跨域问题
  20. 网络对抗技术 2017-2018-2 20152515 Exp1 PC平台逆向破解(5)M

热门文章

  1. (转)示例化讲解RIP路由更新机制
  2. ReentrantLock实现原理及源码分析
  3. taskctl 软件集群安装部署
  4. Android保存图片到本地相册
  5. Java 字符串截取问题
  6. C++ STL 栈和队列详解
  7. CSS样式----浮动(图文详解)
  8. Apache安装编译遇到APR的问题
  9. Java String字符串深入详解
  10. 用for循环筛选奇偶表格栏