Cobbled together from several sources around the Internet, I put together a solution this morning to a question posed by one of our developers: how do you make debug v release builds with GNU autotools?
A first pass at answering produced the
ac_build_types.m4 macro for autoconf. First, some usage. Here is
AC_PREREQ(2.59) AC_INIT([my_project], [0.0.0], [email@example.com]) AC_CONFIG_SRCDIR([config.h.in]) AC_CONFIG_HEADER([config.h]) AM_INIT_AUTOMAKE AC_BUILD_TYPES dnl Rest of file...
The only thing different from a standard
configure.ac is the addition of
AC_BUILD_TYPES. The effect of that shows in
$ ./configure --help # ... Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-debug build debug version --enable-profile build profiling version --enable-release build release version # ...
Now there are flags to build debug, profiling and release builds.
Last is the macro itself:
C_DEFUN([AC_BUILD_TYPES], [ AC_ARG_ENABLE(debug, [ --enable-debug build debug version], CFLAGS="$CFLAGS -DDEBUG -O0 -g3 -Wall" CXXFLAGS="$CXXFLAGS -DDEBUG -O0 -g3 -Wall") AC_ARG_ENABLE(gprof, [ --enable-profile build profiling version], CFLAGS="$CFLAGS -pg" CXXFLAGS="$CXXFLAGS -pg" LDFLAGS="$LDFLAGS -pg") AC_ARG_ENABLE(release, [ --enable-release build release version], CFLAGS="$CFLAGS -DNDEBUG -g0 -O3" CXXFLAGS="$CXXFLAGS -DNDEBUG -g0 -O3") ])
That's all! Save the definition into something like
ac_build_types.m4 and run
aclocal -Idirectory-containing-macros as part of creating your
./configure for other developers.