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 configure.ac:
AC_PREREQ(2.59) AC_INIT([my_project], [0.0.0], [binkley@alumni.rice.edu]) 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:
$ ./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.
No comments:
Post a Comment