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