How to set a define through "./configure" with Autoconf
Solution 1
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
Solution 2
These days autoheader demands
AC_DEFINE([MYDEFINE], [1], [Description here])
Comments
-
Luiz Antonio almost 2 years
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?
-
Luiz Antonio over 11 yearsOk, maybe I haven't been that clear. I have to set this define to create an executable, but I need to compile the same source code without this define to create another executable. Can I set this define some other way on command line?
-
Some programmer dude over 11 years@LuizAntonio Added how to add make-variables on the command line
-
Jack Kelly over 11 yearsRemark: You're meant to set
-D
flags inAM_CPPFLAGS
,libfoo_la_CPPFLAGS
orbar_CPPFLAGS
, as it's a preprocessor flag. -
jww over 6 yearsI think Carlo's answer is more correct. Using the pattern above I get
/usr/bin/autoheader failed with exit status: 1
(after a few other warnings).