http://lists.gnu.org/archive/html/autoconf/2006-04/msg00002.html

http://www.linuxidc.com/Linux/2013-07/87257.htm

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的选项来控制编译出的可执行文件是否带有调试信息了。

如何去除configure的默认选择-g O2的更多相关文章

  1. EXT 省市三级联动及默认选择

    var provinceStore = Ext.create('Ext.data.Store', { fields: ['id', 'name'], proxy: { type: 'ajax', ur ...

  2. TRUNCATE 删除表,无法回退。默认选择为整个表的内容,所以不能加条件。

    TRUNCATE 删除表,无法回退.默认选择为整个表的内容,所以不能加条件.DELETE 删除表,可以回退.可以带where 条件.建议使用delete.但是TRUNCATE 删除表数据比delete ...

  3. jSP的3种方式实现radio ,checkBox,select的默认选择值。

    jSP的3种方式实现radio ,checkBox,select的默认选择值.以radiao 为例:第一种方式:在jsp中使用java 脚本,这个方法最直接,不过脚本太多,不容易维护<%Stri ...

  4. java总结:Java中获取系统时间(年、月、日)以及下拉菜单默认选择系统年、月、日的方法

    <!-- 获取系统当前的年.月.日 --> <%@ page import="java.util.*"%> <% Calendar calendar= ...

  5. ngular ionic select ng-options 默认选择第一个值的写法

    1. html <select ng-model="selectOrderState" style="border:none;left:0" ng-opt ...

  6. php一些单选、复选框的默认选择方法(示例)

    转载 http://www.php.cn/php-weizijiaocheng-360029.html 一. radio和checkbox及php select默认选择的实现代码 1.radio单选框 ...

  7. 用Jquery实现修改页面selecte标签的默认选择

    在WEB开发中,最基础的也是用的最多的就是数据库的增删改查,修改往往以为的小部分的改动,所以我们往往是在表单中填充以前的内容然后显示给用户进行修改操作. 在填充默认内容的时候对于input标签我们往往 ...

  8. Csharp: TreeView 初始化设置默认选择节点

    /// <summary> /// 设置查找的节点为选定节点 /// 涂聚文 /// 2013-07-15 /// </summary> /// <param name= ...

  9. sprignboot 中thymeleaf和freemarker 都存在时,默认选择哪个

    我们 无聊的时候想到,freemarker和thymeleaf都是springboot默认支持的模板,当这2个同时存在并有相同名字的时候,springboot会默认选择哪个模板来显示呢 ? 所以今天我 ...

随机推荐

  1. 如何有效抓取SQL Server的BLOCKING信息

    原文:如何有效抓取SQL Server的BLOCKING信息 转自:微软亚太区数据库技术支持组 官方博客 http://blogs.msdn.com/b/apgcdsd/archive/2011/12 ...

  2. Decorator模式设计模式

    装饰者模式定义:动态地将责任附加到对象上. 若要扩展功能.装饰者提供了比继续更有弹性的替代方案. 简单定义:包装一个对象.以提供新的行为. 装饰者模式能够有效应对类爆炸问题. OO原则: 对扩展开放, ...

  3. UVa 10190 - Divide, But Not Quite Conquer!

    称号:给你第一个任期的等比数列和倒数公比,最后一个条目假定1这一系列的输出,否则输出Boring!. 分析:数学.递减的.所以公比的倒数一定要大于1.即m > 1. 然后在附加一个条件n  &g ...

  4. SharePoint 2013 母版页修改后,无法添加应用程序

    原文:SharePoint 2013 母版页修改后,无法添加应用程序 问题描述:前一段时间尝试了一下将HTML文件转换为母版页,但是,用着用着又发现新的问题,我们转换的母版页,设置成默认母版页以后,无 ...

  5. CentOS7 安装Bind

    简要记录安装Bind的过程以及遇到的问题 一. 虚拟机准备 准备了2台虚拟机,都是装的CentOS7 64_1的IP地址为192.168.1.160,2的地址为161.161作为DNS服务器. 二.下 ...

  6. HDU 3729 I&#39;m Telling the Truth(二部图最大匹配+结果输出)

    职务地址:HDU 3729 二分图最大匹配+按字典序输出结果. 仅仅要从数字大的開始匹配就能够保证字典序最大了.群里有人问. . 就顺手写了这题. . 代码例如以下: #include <ios ...

  7. java 7K交通灯管理系统面试题

    交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑.详细需求例如以下: 1. 异常随机生成依照各个路线行驶的车辆.    比如:    由南向而来去往北向的车辆----直行车辆    由西向而来去往 ...

  8. zoj3791(An Easy Game) DP

    意甲冠军:给定两个01弦s1,s2.每一个变化s1在m字 - 位.要求k制作步骤之后s1变s2有多少种方法. 解法:DP,关键是状态的设计.考虑还是唯一性和可传递性.dp[i][j]表示第i步后有j个 ...

  9. Java代码优化(转)

    前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用, ...

  10. 原因好消息: PSP游戏自己主动算法设计(两)

    这是我们讲的传说中的一项措施A×算法.事实上,类上传之前似小件,下面我们分析一下它去 毕竟,在游戏程序,我们从移动一个点到另一个点.和得到的轨迹的最短距离,类别似这样的算法以及几个.运营效率几乎是相同 ...