manpagez: man pages & more
info autoconf
Home | html | info | man

File: autoconf.info,  Node: Build Directories,  Next: Automatic Remaking,  Prev: Changed Directory Variables,  Up: Makefile Substitutions

4.8.4 Build Directories
-----------------------

You can support compiling a software package for several architectures
simultaneously from the same copy of the source code.  The object files
for each architecture are kept in their own directory.

   To support doing this, ‘make’ uses the ‘VPATH’ variable to find the
files that are in the source directory.  GNU Make can do this.  Most
other recent ‘make’ programs can do this as well, though they may have
difficulties and it is often simpler to recommend GNU ‘make’ (*note
VPATH and Make::).  Older ‘make’ programs do not support ‘VPATH’; when
using them, the source code must be in the same directory as the object
files.

   If you are using GNU Automake, the remaining details in this section
are already covered for you, based on the contents of your
‘Makefile.am’.  But if you are using Autoconf in isolation, then
supporting ‘VPATH’ requires the following in your ‘Makefile.in’:

     srcdir = @srcdir@
     VPATH = @srcdir@

   Do not set ‘VPATH’ to the value of another variable (*note Variables
listed in VPATH::.

   ‘configure’ substitutes the correct value for ‘srcdir’ when it
produces ‘Makefile’.

   Do not use the ‘make’ variable ‘$<’, which expands to the file name
of the file in the source directory (found with ‘VPATH’), except in
implicit rules.  (An implicit rule is one such as ‘.c.o’, which tells
how to create a ‘.o’ file from a ‘.c’ file.)  Some versions of ‘make’ do
not set ‘$<’ in explicit rules; they expand it to an empty value.

   Instead, Make command lines should always refer to source files by
prefixing them with ‘$(srcdir)/’.  It's safer to quote the source
directory name, in case it contains characters that are special to the
shell.  Because ‘$(srcdir)’ is expanded by Make, single-quoting works
and is safer than double-quoting.  For example:

     time.info: time.texinfo
             $(MAKEINFO) '$(srcdir)/time.texinfo'

© manpagez.com 2000-2025
Individual documents may contain additional copyright information.