Search code examples
c++autotoolsconfigureautoconfautomake

How to set a define through "./configure" with Autoconf


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?


Solution

  • 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