Sometimes it is useful to determine the programs that are to be built
at configure time. For instance, GNU cpio
only builds
mt
and rmt
under special circumstances. The means to
achieve conditional compilation of programs are the same you can use
to compile source files conditionally: substitutions or conditionals.
configure
substitutions
In this case, you must notify Automake of all the programs that can
possibly be built, but at the same time cause the generated
Makefile.in
to use the programs specified by configure
.
This is done by having configure
substitute values into each
_PROGRAMS
definition, while listing all optionally built programs
in EXTRA_PROGRAMS
.
bin_PROGRAMS = cpio pax $(MT) libexec_PROGRAMS = $(RMT) EXTRA_PROGRAMS = mt rmt
As explained in EXEEXT, Automake will rewrite
bin_PROGRAMS
, libexec_PROGRAMS
, and
EXTRA_PROGRAMS
, appending $(EXEEXT)
to each binary.
Obviously it cannot rewrite values obtained at run-time through
configure
substitutions, therefore you should take care of
appending $(EXEEXT)
yourself, as in AC_SUBST([MT],
['mt${EXEEXT}'])
.
You can also use Automake conditionals (see Conditionals) to
select programs to be built. In this case you don't have to worry
about $(EXEEXT)
or EXTRA_PROGRAMS
.
bin_PROGRAMS = cpio pax if WANT_MT bin_PROGRAMS += mt endif if WANT_RMT libexec_PROGRAMS = rmt endif