configure.ac 中开启 gdb 优化选项

在使用 gcc 对 C 语言代码进行编译时,可使用调试编译参数以生成可供调试器使用的调试信息,使用编译优化选项选择关闭或者开启优化。

编译调试选项

​ 通常调试编译参数是-g,如果使用 gdb 作为调试器则可以使用-ggdb 选项,但它会包含一些 gdb 专用信息。参数-g 包括了 3 个级别,分别是:

  • 级别 1(-g1):不包含局部变量和与行号有关的调试信息,因此只能够用于回溯跟踪和堆栈转储,回溯跟踪指的是监视程序在运行过程中的函数调用历史,堆栈转储则是一种以原始的十六进制格式保存程序执行环境的方法,两者都是经常用到的调试手段。
  • 级别 2(-g2):此时产生的调试信息包括扩展的符号表、行号、局部或外部变量信息。
  • 级别 3(-g3):包含级别 2 中的所有调试信息,以及源代码中定义的宏。

编译优化选项

​ 编译优化选项使用-O 表示,编译优化包含了 5 种不同级别,分别是:

-O0:关闭所有优化选项 -O1:第一级别优化,使用此选项可使可执行文件更小,运行更快,并不会增加太多编译时间,可以简写为-O -O2:第二级别优化,采用了几乎所有优化技术,使用此选项会延长编译时间 -O3:第三级别优化,在-O2 的基础上增加了产生 inline 函数、使用寄存器等优化技术 -Os/O2.5:此选项类似于-O2,作用是优化所占用的空间,但不会进行性能优化,常用于生成最终版本

configure.ac 中修改编译优化选项

如果只是想要在调试的时候关闭优化选项,而不想改变 configure 文件默认的优化选项,可以在./configure 时指定 CFLAGS=’${CFLAGS} -g -O0’。

​ 想要修改 configure.ac 中的编译优化选项,需要找到 CFLAGS 宏,该宏为默认的宏,我们在它后面添加编译优化选项。

​ 若想要更好的控制该编译优化选项的开关,可在 configure.ac 中添加如下代码:

#debug options support
AC_ARG_ENABLE([debug],
    [AS_HELP_STRING([--enable-debug],[debug program(default is no)])],
    [CFLAGS="${CFLAGS} -g -O0"],
    [CFLAGS="-g -O2"])

​ 该代码的意思为添加一个–enable-debug 的选项,若用户使用该选项则关闭优化选项,否则开启优化选项。