C++ – How to set a define through “./configure” with Autoconf

autoconfautomakeautotoolscconfigure

I have one project that can generate two diferent applications based on one define.

libfoo_la_CXXFLAGS = -DMYDEFINE

I have to modify the Makefile.am to set this define, so it is not automatic.

Can I set this define somehow through the configure command?
Is there any other way to set one define using autotools?

Best Answer

You have to edit the file configure.ac, and before AC_OUTPUT (which is the last thing in the file) add a call to AC_DEFINE.

In a simple case like yours, it should be enough with:

AC_DEFINE(MYDEFINE)

If you want to set a value, you use:

AC_DEFINE(MYDEFINE, 123)

This last will add -DMYDEFINE=123 to the flags (DEFS = in Makefile), and #define MYDEFINE 123 in the generated autoconf header if you use that.

I recommend you read the documentation from the beginning, and work through their examples and tutorials. Also check other projects' configure files to see how they use different features.

Edit: If you want to pass flags on the command line to the make command, then you do something like this:

libfoo_la_CXXFLAGS = $(MYFLAGS)

Then you call make like this:

$ make MYFLAGS="-DMYDEFINE"

If you don't set MYFLAGS on the command line, it will be undefined and empty in the makefile.

You can also set target-specific CPPFLAGS in Makefile.am, in which case the source files will be recompiled, once for each set of flags:

lib_LTLIBRARIES = libfoo.la libbar.la
libfoo_la_SOURCES = foo.c
libfoo_la_CPPFLAGS = -DFOO
libbar_la_SOURCES = foo.c
libbar_la_CPPFLAGS = -DBAR