Search code examples
c++autotoolsautoconfautomake

GNU autotools: Debug/Release targets?


I've been looking for this for a while: I'm currently converting a medium-size program to autotools, coming from an Eclipse-based method (with makefiles)

I'm always used to having a "debug" build, with all debug symbols and no optimizations, and a "release" build, without debug symbols and best optimizations.

Now I'm trying to replicate this in some way with autotools, so I can (perhaps) do something like:

./configure
make debug

Which would have all debug symbols and no optimizations, and where:

./configure
make

Would result in the "release" version (default)

PS: I've read about the --enable-debug flag/feature, but in my current (simple) setup, using that is unrecognized by configure


Solution

  • Add a clause to your configure.in or configure.ac file;

    AC_ARG_ENABLE(debug,
    AS_HELP_STRING([--enable-debug],
                   [enable debugging, default: no]),
    [case "${enableval}" in
                 yes) debug=true ;;
                 no)  debug=false ;;
                 *)   AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;;
    esac],
    [debug=false])
    
    AM_CONDITIONAL(DEBUG, test x"$debug" = x"true")
    

    Now in your Makefile.inor Makefile.am;

    if DEBUG
    AM_CFLAGS = -g3 -O0
    AM_CXXFLAGS = -g3 -O0
    else
    AM_CFLAGS = -O2
    AM_CXXFLAGS = -O2
    endif
    

    So when debugis enabled you can modify your {C/CXX}FLAGSto enable debug information.