automake-1.16: Length Limitations

 
 3.4 Staying below the command line length limit
 ===============================================
 
 Traditionally, most unix-like systems have a length limitation for the
 command line arguments and environment contents when creating new
 processes (see for example
 <https://www.in-ulm.de/~mascheck/various/argmax/> for an overview on
 this issue), which of course also applies to commands spawned by ‘make’.
 POSIX requires this limit to be at least 4096 bytes, and most modern
 systems have quite high limits (or are unlimited).
 
    In order to create portable Makefiles that do not trip over these
 limits, it is necessary to keep the length of file lists bounded.
 Unfortunately, it is not possible to do so fully transparently within
 Automake, so your help may be needed.  Typically, you can split long
 file lists manually and use different installation directory names for
 each list.  For example,
 
      data_DATA = file1 ... fileN fileN+1 ... file2N
 
 may also be written as
 
      data_DATA = file1 ... fileN
      data2dir = $(datadir)
      data2_DATA = fileN+1 ... file2N
 
 and will cause Automake to treat the two lists separately during ‘make
 install’.  See ⇒The Two Parts of Install for choosing directory
 names that will keep the ordering of the two parts of installation Note
 that ‘make dist’ may still only work on a host with a higher length
 limit in this example.
 
    Automake itself employs a couple of strategies to avoid long command
 lines.  For example, when ‘${srcdir}/’ is prepended to file names, as
 can happen with above ‘$(data_DATA)’ lists, it limits the amount of
 arguments passed to external commands.
 
    Unfortunately, some systems’ ‘make’ commands may prepend ‘VPATH’
 prefixes like ‘${srcdir}/’ to file names from the source tree
 automatically (⇒Automatic Rule Rewriting (autoconf)Automatic Rule
 Rewriting.).  In this case, the user may have to switch to use GNU Make,
 or refrain from using VPATH builds, in order to stay below the length
 limit.
 
    For libraries and programs built from many sources, convenience
 archives may be used as intermediates in order to limit the object list
 length (⇒Libtool Convenience Libraries).