Follow Techotopia on Twitter

On-line Guides
All Guides
eBook Store
iOS / Android
Linux for Beginners
Office Productivity
Linux Installation
Linux Security
Linux Utilities
Linux Virtualization
Linux Kernel
System/Network Admin
Scripting Languages
Development Tools
Web Development
GUI Toolkits/Desktop
Mail Systems
Eclipse Documentation

How To Guides
General System Admin
Linux Security
Linux Filesystems
Web Servers
Graphics & Desktop
PC Hardware
Problem Solutions
Privacy Policy




7.2 Setting Output Variables

Another way to record the results of tests is to set output variables, which are shell variables whose values are substituted into files that configure outputs. The two macros below create new output variables. See Preset Output Variables, for a list of output variables that are always available.

— Macro: AC_SUBST (variable, [value])

Create an output variable from a shell variable. Make AC_OUTPUT substitute the variable variable into output files (typically one or more makefiles). This means that AC_OUTPUT replaces instances of ‘@variable@’ in input files with the value that the shell variable variable has when AC_OUTPUT is called. The value can contain newlines. The substituted value is not rescanned for more output variables; occurrences of ‘@variable@’ in the value are inserted literally into the output file. (The algorithm uses the special marker |#_!!_#| internally, so the substituted value cannot contain |#_!!_#|.)

If value is given, in addition assign it to variable.

The string variable is passed to m4_pattern_allow (see Forbidden Patterns).

— Macro: AC_SUBST_FILE (variable)

Another way to create an output variable from a shell variable. Make AC_OUTPUT insert (without substitutions) the contents of the file named by shell variable variable into output files. This means that AC_OUTPUT replaces instances of ‘@variable@’ in output files (such as with the contents of the file that the shell variable variable names when AC_OUTPUT is called. Set the variable to /dev/null for cases that do not have a file to insert. This substitution occurs only when the ‘@variable@’ is on a line by itself, optionally surrounded by spaces and tabs. The substitution replaces the whole line, including the spaces, tabs, and the terminating newline.

This macro is useful for inserting makefile fragments containing special dependencies or other make directives for particular host or target types into makefiles. For example, could contain:


and then a could contain:

          @[email protected]

The string variable is passed to m4_pattern_allow (see Forbidden Patterns).

Running configure in varying environments can be extremely dangerous. If for instance the user runs ‘CC=bizarre-cc ./configure’, then the cache, config.h, and many other output files depend upon bizarre-cc being the C compiler. If for some reason the user runs ./configure again, or if it is run via ‘./config.status --recheck’, (See Automatic Remaking, and see config.status Invocation), then the configuration can be inconsistent, composed of results depending upon two different compilers.

Environment variables that affect this situation, such as ‘CC’ above, are called precious variables, and can be declared as such by AC_ARG_VAR.

— Macro: AC_ARG_VAR (variable, description)

Declare variable is a precious variable, and include its description in the variable section of ‘./configure --help’.

Being precious means that

  • variable is substituted via AC_SUBST.
  • The value of variable when configure was launched is saved in the cache, including if it was not specified on the command line but via the environment. Indeed, while configure can notice the definition of CC in ‘./configure CC=bizarre-cc’, it is impossible to notice it in ‘CC=bizarre-cc ./configure’, which, unfortunately, is what most users do.

    We emphasize that it is the initial value of variable which is saved, not that found during the execution of configure. Indeed, specifying ‘./configure FOO=foo’ and letting ‘./configure’ guess that FOO is foo can be two different things.

  • variable is checked for consistency between two configure runs. For instance:
                   $ ./configure --silent --config-cache
                   $ CC=cc ./configure --silent --config-cache
                   configure: error: `CC' was not set in the previous run
                   configure: error: changes in the environment can compromise \
                   the build
                   configure: error: run `make distclean' and/or \
                   `rm config.cache' and start over

    and similarly if the variable is unset, or if its content is changed.

  • variable is kept during automatic reconfiguration (see config.status Invocation) as if it had been passed as a command line argument, including when no cache is used:
                   $ CC=/usr/bin/cc ./configure undeclared_var=raboof --silent
                   $ ./config.status --recheck
                   running /bin/sh ./configure undeclared_var=raboof --silent \
                     CC=/usr/bin/cc  --no-create --no-recursion

  Published under the terms of the GNU General Public License Design by Interspire