如何去除configure的默认选择-g O2

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

时间: 2024-09-28 20:19:26

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

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

JSP的3种方式实现radio ,checkBox,select的默认选择值.以radiao 为例:第一种方式:在jsp中使用java 脚本,这个方法最直接,不过脚本太多,不容易维护<%String state = request.getParrameter("state" )%> <td width="27"><input type="radio" name="state" value=&quo

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

TRUNCATE 删除表,无法回退.默认选择为整个表的内容,所以不能加条件.DELETE 删除表,可以回退.可以带where 条件.建议使用delete.但是TRUNCATE 删除表数据比delete要快. 使用TRUNCATE TABLE语句 TRUNCATE TABLE语句提供了一种删除表中所有记录的快速方法.因为TRUNCATE TABLE语句不记录日志,只记录整个数据页的释放操作,而DELETE语句对每一行修改都记录日志,所以使用TRUNCATE TABLE语句进行删除操作总是比没有指定

select默认选择的实现方法

<script type="text/javascript"> <!-- document.biao.bbb.value = "云南";//biao是表单名,atc_province是select标签ID,云南是select默认选中项 //--> </script> <form name="biao" method="post" action="" enctype=

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

我们 无聊的时候想到,freemarker和thymeleaf都是springboot默认支持的模板,当这2个同时存在并有相同名字的时候,springboot会默认选择哪个模板来显示呢 ? 所以今天我就实际操作一下 ,都用默认的,不采用其他的配置来观察一下 ,.导入这2个模板的jar <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter

DataGridView点击空白处和失去焦点后取消选择和关闭默认选择第一行C#Winform

默认选择第一行,可以通过窗体的Load事件中调用Datagridview的ClearSelection来取消选择 也可以设置 Datagridview的CurrentCell = null; 还可以将已经选中的行的 dgv.Row[0].Selected=false; 那么如何让用户点击如图箭头所指区域 就取消选择呢? 需要在DataGridView的MouseDown或者MouseClick事件内处理 DataGridView dgv = sender as DataGridView;Data

layui 的一些小技巧写法如:select默认选择,时间选择插件

<div class="layui-form-item"> <label class="layui-form-label">选择广告位置</label> <div class="layui-input-inline" style="width: 300px;" > <select name="adv_site" id="siteid"

执行./configure报checking for g++... no错误

今天在某实验环境下编译安装软件时,执行./configure 报错(./configure是源代码安装的第一步,主要的作用是对即将安装的软件进行配置,检查当前的环境是否满足要安装软件的依赖关系),错误提示如下: checking build system type... x86_64-unknown-linux-gnuchecking host system type... x86_64-unknown-linux-gnuchecking for a BSD-compatible install

去除selet标签默认样式

select { /*Chrome和Firefox里面的边框是不一样的,所以复写了一下*/ border: solid 1px #000; /*很关键:将默认的select选择框样式清除*/ appearance:none; -moz-appearance:none; -webkit-appearance:none; /*在选择框的最右侧中间显示小箭头图片*/ background: url("http://ourjs.github.io/static/2015/arrow.png")

如何让双核浏览器默认选择 WebKit 内核渲染自己开发的网页

我们可以使用标签来指定适合自己网站的渲染内核名称,当双核浏览器访问本网页时,就会根据我们的指示,选择我们指定的渲染内核来处理网页.若页面需默认用极速核,增加标签: <meta name="renderer" content="webkit"> 若页面需默认用ie兼容内核,增加标签: <meta name="renderer" content="ie-comp"> 若页面需默认用ie标准内核,增加标签: