summaryrefslogtreecommitdiff
path: root/doc/make.info-2
diff options
context:
space:
mode:
Diffstat (limited to 'doc/make.info-2')
-rw-r--r--doc/make.info-25884
1 files changed, 5884 insertions, 0 deletions
diff --git a/doc/make.info-2 b/doc/make.info-2
new file mode 100644
index 0000000..c6229ff
--- /dev/null
+++ b/doc/make.info-2
@@ -0,0 +1,5884 @@
+This is make.info, produced by makeinfo version 5.2 from make.texi.
+
+This file documents the GNU 'make' utility, which determines
+automatically which pieces of a large program need to be recompiled, and
+issues the commands to recompile them.
+
+ This is Edition 0.73, last updated 5 October 2014, of 'The GNU Make
+Manual', for GNU 'make' version 4.1.
+
+ Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
+1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.3 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, with the Front-Cover Texts
+ being "A GNU Manual," and with the Back-Cover Texts as in (a)
+ below. A copy of the license is included in the section entitled
+ "GNU Free Documentation License."
+
+ (a) The FSF's Back-Cover Text is: "You have the freedom to copy and
+ modify this GNU manual. Buying copies from the FSF supports it in
+ developing GNU and promoting software freedom."
+INFO-DIR-SECTION Software development
+START-INFO-DIR-ENTRY
+* Make: (make). Remake files automatically.
+END-INFO-DIR-ENTRY
+
+
+File: make.info, Node: Implicit Rules, Next: Archives, Prev: Running, Up: Top
+
+10 Using Implicit Rules
+***********************
+
+Certain standard ways of remaking target files are used very often. For
+example, one customary way to make an object file is from a C source
+file using the C compiler, 'cc'.
+
+ "Implicit rules" tell 'make' how to use customary techniques so that
+you do not have to specify them in detail when you want to use them.
+For example, there is an implicit rule for C compilation. File names
+determine which implicit rules are run. For example, C compilation
+typically takes a '.c' file and makes a '.o' file. So 'make' applies
+the implicit rule for C compilation when it sees this combination of
+file name endings.
+
+ A chain of implicit rules can apply in sequence; for example, 'make'
+will remake a '.o' file from a '.y' file by way of a '.c' file.
+
+ The built-in implicit rules use several variables in their recipes so
+that, by changing the values of the variables, you can change the way
+the implicit rule works. For example, the variable 'CFLAGS' controls
+the flags given to the C compiler by the implicit rule for C
+compilation.
+
+ You can define your own implicit rules by writing "pattern rules".
+
+ "Suffix rules" are a more limited way to define implicit rules.
+Pattern rules are more general and clearer, but suffix rules are
+retained for compatibility.
+
+* Menu:
+
+* Using Implicit:: How to use an existing implicit rule
+ to get the recipes for updating a file.
+* Catalogue of Rules:: A list of built-in rules.
+* Implicit Variables:: How to change what predefined rules do.
+* Chained Rules:: How to use a chain of implicit rules.
+* Pattern Rules:: How to define new implicit rules.
+* Last Resort:: How to define a recipe for rules which
+ cannot find any.
+* Suffix Rules:: The old-fashioned style of implicit rule.
+* Implicit Rule Search:: The precise algorithm for applying
+ implicit rules.
+
+
+File: make.info, Node: Using Implicit, Next: Catalogue of Rules, Prev: Implicit Rules, Up: Implicit Rules
+
+10.1 Using Implicit Rules
+=========================
+
+To allow 'make' to find a customary method for updating a target file,
+all you have to do is refrain from specifying recipes yourself. Either
+write a rule with no recipe, or don't write a rule at all. Then 'make'
+will figure out which implicit rule to use based on which kind of source
+file exists or can be made.
+
+ For example, suppose the makefile looks like this:
+
+ foo : foo.o bar.o
+ cc -o foo foo.o bar.o $(CFLAGS) $(LDFLAGS)
+
+Because you mention 'foo.o' but do not give a rule for it, 'make' will
+automatically look for an implicit rule that tells how to update it.
+This happens whether or not the file 'foo.o' currently exists.
+
+ If an implicit rule is found, it can supply both a recipe and one or
+more prerequisites (the source files). You would want to write a rule
+for 'foo.o' with no recipe if you need to specify additional
+prerequisites, such as header files, that the implicit rule cannot
+supply.
+
+ Each implicit rule has a target pattern and prerequisite patterns.
+There may be many implicit rules with the same target pattern. For
+example, numerous rules make '.o' files: one, from a '.c' file with the
+C compiler; another, from a '.p' file with the Pascal compiler; and so
+on. The rule that actually applies is the one whose prerequisites exist
+or can be made. So, if you have a file 'foo.c', 'make' will run the C
+compiler; otherwise, if you have a file 'foo.p', 'make' will run the
+Pascal compiler; and so on.
+
+ Of course, when you write the makefile, you know which implicit rule
+you want 'make' to use, and you know it will choose that one because you
+know which possible prerequisite files are supposed to exist. *Note
+Catalogue of Built-In Rules: Catalogue of Rules, for a catalogue of all
+the predefined implicit rules.
+
+ Above, we said an implicit rule applies if the required prerequisites
+"exist or can be made". A file "can be made" if it is mentioned
+explicitly in the makefile as a target or a prerequisite, or if an
+implicit rule can be recursively found for how to make it. When an
+implicit prerequisite is the result of another implicit rule, we say
+that "chaining" is occurring. *Note Chains of Implicit Rules: Chained
+Rules.
+
+ In general, 'make' searches for an implicit rule for each target, and
+for each double-colon rule, that has no recipe. A file that is
+mentioned only as a prerequisite is considered a target whose rule
+specifies nothing, so implicit rule search happens for it. *Note
+Implicit Rule Search Algorithm: Implicit Rule Search, for the details of
+how the search is done.
+
+ Note that explicit prerequisites do not influence implicit rule
+search. For example, consider this explicit rule:
+
+ foo.o: foo.p
+
+The prerequisite on 'foo.p' does not necessarily mean that 'make' will
+remake 'foo.o' according to the implicit rule to make an object file, a
+'.o' file, from a Pascal source file, a '.p' file. For example, if
+'foo.c' also exists, the implicit rule to make an object file from a C
+source file is used instead, because it appears before the Pascal rule
+in the list of predefined implicit rules (*note Catalogue of Built-In
+Rules: Catalogue of Rules.).
+
+ If you do not want an implicit rule to be used for a target that has
+no recipe, you can give that target an empty recipe by writing a
+semicolon (*note Defining Empty Recipes: Empty Recipes.).
+
+
+File: make.info, Node: Catalogue of Rules, Next: Implicit Variables, Prev: Using Implicit, Up: Implicit Rules
+
+10.2 Catalogue of Built-In Rules
+================================
+
+Here is a catalogue of predefined implicit rules which are always
+available unless the makefile explicitly overrides or cancels them.
+*Note Canceling Implicit Rules: Canceling Rules, for information on
+canceling or overriding an implicit rule. The '-r' or
+'--no-builtin-rules' option cancels all predefined rules.
+
+ This manual only documents the default rules available on POSIX-based
+operating systems. Other operating systems, such as VMS, Windows, OS/2,
+etc. may have different sets of default rules. To see the full list of
+default rules and variables available in your version of GNU 'make', run
+'make -p' in a directory with no makefile.
+
+ Not all of these rules will always be defined, even when the '-r'
+option is not given. Many of the predefined implicit rules are
+implemented in 'make' as suffix rules, so which ones will be defined
+depends on the "suffix list" (the list of prerequisites of the special
+target '.SUFFIXES'). The default suffix list is: '.out', '.a', '.ln',
+'.o', '.c', '.cc', '.C', '.cpp', '.p', '.f', '.F', '.m', '.r', '.y',
+'.l', '.ym', '.lm', '.s', '.S', '.mod', '.sym', '.def', '.h', '.info',
+'.dvi', '.tex', '.texinfo', '.texi', '.txinfo', '.w', '.ch' '.web',
+'.sh', '.elc', '.el'. All of the implicit rules described below whose
+prerequisites have one of these suffixes are actually suffix rules. If
+you modify the suffix list, the only predefined suffix rules in effect
+will be those named by one or two of the suffixes that are on the list
+you specify; rules whose suffixes fail to be on the list are disabled.
+*Note Old-Fashioned Suffix Rules: Suffix Rules, for full details on
+suffix rules.
+
+Compiling C programs
+ 'N.o' is made automatically from 'N.c' with a recipe of the form
+ '$(CC) $(CPPFLAGS) $(CFLAGS) -c'.
+
+Compiling C++ programs
+ 'N.o' is made automatically from 'N.cc', 'N.cpp', or 'N.C' with a
+ recipe of the form '$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c'. We
+ encourage you to use the suffix '.cc' for C++ source files instead
+ of '.C'.
+
+Compiling Pascal programs
+ 'N.o' is made automatically from 'N.p' with the recipe '$(PC)
+ $(PFLAGS) -c'.
+
+Compiling Fortran and Ratfor programs
+ 'N.o' is made automatically from 'N.r', 'N.F' or 'N.f' by running
+ the Fortran compiler. The precise recipe used is as follows:
+
+ '.f'
+ '$(FC) $(FFLAGS) -c'.
+ '.F'
+ '$(FC) $(FFLAGS) $(CPPFLAGS) -c'.
+ '.r'
+ '$(FC) $(FFLAGS) $(RFLAGS) -c'.
+
+Preprocessing Fortran and Ratfor programs
+ 'N.f' is made automatically from 'N.r' or 'N.F'. This rule runs
+ just the preprocessor to convert a Ratfor or preprocessable Fortran
+ program into a strict Fortran program. The precise recipe used is
+ as follows:
+
+ '.F'
+ '$(FC) $(CPPFLAGS) $(FFLAGS) -F'.
+ '.r'
+ '$(FC) $(FFLAGS) $(RFLAGS) -F'.
+
+Compiling Modula-2 programs
+ 'N.sym' is made from 'N.def' with a recipe of the form '$(M2C)
+ $(M2FLAGS) $(DEFFLAGS)'. 'N.o' is made from 'N.mod'; the form is:
+ '$(M2C) $(M2FLAGS) $(MODFLAGS)'.
+
+Assembling and preprocessing assembler programs
+ 'N.o' is made automatically from 'N.s' by running the assembler,
+ 'as'. The precise recipe is '$(AS) $(ASFLAGS)'.
+
+ 'N.s' is made automatically from 'N.S' by running the C
+ preprocessor, 'cpp'. The precise recipe is '$(CPP) $(CPPFLAGS)'.
+
+Linking a single object file
+ 'N' is made automatically from 'N.o' by running the linker (usually
+ called 'ld') via the C compiler. The precise recipe used is
+ '$(CC) $(LDFLAGS) N.o $(LOADLIBES) $(LDLIBS)'.
+
+ This rule does the right thing for a simple program with only one
+ source file. It will also do the right thing if there are multiple
+ object files (presumably coming from various other source files),
+ one of which has a name matching that of the executable file.
+ Thus,
+
+ x: y.o z.o
+
+ when 'x.c', 'y.c' and 'z.c' all exist will execute:
+
+ cc -c x.c -o x.o
+ cc -c y.c -o y.o
+ cc -c z.c -o z.o
+ cc x.o y.o z.o -o x
+ rm -f x.o
+ rm -f y.o
+ rm -f z.o
+
+ In more complicated cases, such as when there is no object file
+ whose name derives from the executable file name, you must write an
+ explicit recipe for linking.
+
+ Each kind of file automatically made into '.o' object files will be
+ automatically linked by using the compiler ('$(CC)', '$(FC)' or
+ '$(PC)'; the C compiler '$(CC)' is used to assemble '.s' files)
+ without the '-c' option. This could be done by using the '.o'
+ object files as intermediates, but it is faster to do the compiling
+ and linking in one step, so that's how it's done.
+
+Yacc for C programs
+ 'N.c' is made automatically from 'N.y' by running Yacc with the
+ recipe '$(YACC) $(YFLAGS)'.
+
+Lex for C programs
+ 'N.c' is made automatically from 'N.l' by running Lex. The actual
+ recipe is '$(LEX) $(LFLAGS)'.
+
+Lex for Ratfor programs
+ 'N.r' is made automatically from 'N.l' by running Lex. The actual
+ recipe is '$(LEX) $(LFLAGS)'.
+
+ The convention of using the same suffix '.l' for all Lex files
+ regardless of whether they produce C code or Ratfor code makes it
+ impossible for 'make' to determine automatically which of the two
+ languages you are using in any particular case. If 'make' is
+ called upon to remake an object file from a '.l' file, it must
+ guess which compiler to use. It will guess the C compiler, because
+ that is more common. If you are using Ratfor, make sure 'make'
+ knows this by mentioning 'N.r' in the makefile. Or, if you are
+ using Ratfor exclusively, with no C files, remove '.c' from the
+ list of implicit rule suffixes with:
+
+ .SUFFIXES:
+ .SUFFIXES: .o .r .f .l ...
+
+Making Lint Libraries from C, Yacc, or Lex programs
+ 'N.ln' is made from 'N.c' by running 'lint'. The precise recipe is
+ '$(LINT) $(LINTFLAGS) $(CPPFLAGS) -i'. The same recipe is used on
+ the C code produced from 'N.y' or 'N.l'.
+
+TeX and Web
+ 'N.dvi' is made from 'N.tex' with the recipe '$(TEX)'. 'N.tex' is
+ made from 'N.web' with '$(WEAVE)', or from 'N.w' (and from 'N.ch'
+ if it exists or can be made) with '$(CWEAVE)'. 'N.p' is made from
+ 'N.web' with '$(TANGLE)' and 'N.c' is made from 'N.w' (and from
+ 'N.ch' if it exists or can be made) with '$(CTANGLE)'.
+
+Texinfo and Info
+ 'N.dvi' is made from 'N.texinfo', 'N.texi', or 'N.txinfo', with the
+ recipe '$(TEXI2DVI) $(TEXI2DVI_FLAGS)'. 'N.info' is made from
+ 'N.texinfo', 'N.texi', or 'N.txinfo', with the recipe
+ '$(MAKEINFO) $(MAKEINFO_FLAGS)'.
+
+RCS
+ Any file 'N' is extracted if necessary from an RCS file named
+ either 'N,v' or 'RCS/N,v'. The precise recipe used is
+ '$(CO) $(COFLAGS)'. 'N' will not be extracted from RCS if it
+ already exists, even if the RCS file is newer. The rules for RCS
+ are terminal (*note Match-Anything Pattern Rules: Match-Anything
+ Rules.), so RCS files cannot be generated from another source; they
+ must actually exist.
+
+SCCS
+ Any file 'N' is extracted if necessary from an SCCS file named
+ either 's.N' or 'SCCS/s.N'. The precise recipe used is
+ '$(GET) $(GFLAGS)'. The rules for SCCS are terminal (*note
+ Match-Anything Pattern Rules: Match-Anything Rules.), so SCCS files
+ cannot be generated from another source; they must actually exist.
+
+ For the benefit of SCCS, a file 'N' is copied from 'N.sh' and made
+ executable (by everyone). This is for shell scripts that are
+ checked into SCCS. Since RCS preserves the execution permission of
+ a file, you do not need to use this feature with RCS.
+
+ We recommend that you avoid using of SCCS. RCS is widely held to be
+ superior, and is also free. By choosing free software in place of
+ comparable (or inferior) proprietary software, you support the free
+ software movement.
+
+ Usually, you want to change only the variables listed in the table
+above, which are documented in the following section.
+
+ However, the recipes in built-in implicit rules actually use
+variables such as 'COMPILE.c', 'LINK.p', and 'PREPROCESS.S', whose
+values contain the recipes listed above.
+
+ 'make' follows the convention that the rule to compile a '.X' source
+file uses the variable 'COMPILE.X'. Similarly, the rule to produce an
+executable from a '.X' file uses 'LINK.X'; and the rule to preprocess a
+'.X' file uses 'PREPROCESS.X'.
+
+ Every rule that produces an object file uses the variable
+'OUTPUT_OPTION'. 'make' defines this variable either to contain '-o
+$@', or to be empty, depending on a compile-time option. You need the
+'-o' option to ensure that the output goes into the right file when the
+source file is in a different directory, as when using 'VPATH' (*note
+Directory Search::). However, compilers on some systems do not accept a
+'-o' switch for object files. If you use such a system, and use
+'VPATH', some compilations will put their output in the wrong place. A
+possible workaround for this problem is to give 'OUTPUT_OPTION' the
+value '; mv $*.o $@'.
+
+
+File: make.info, Node: Implicit Variables, Next: Chained Rules, Prev: Catalogue of Rules, Up: Implicit Rules
+
+10.3 Variables Used by Implicit Rules
+=====================================
+
+The recipes in built-in implicit rules make liberal use of certain
+predefined variables. You can alter the values of these variables in
+the makefile, with arguments to 'make', or in the environment to alter
+how the implicit rules work without redefining the rules themselves.
+You can cancel all variables used by implicit rules with the '-R' or
+'--no-builtin-variables' option.
+
+ For example, the recipe used to compile a C source file actually says
+'$(CC) -c $(CFLAGS) $(CPPFLAGS)'. The default values of the variables
+used are 'cc' and nothing, resulting in the command 'cc -c'. By
+redefining 'CC' to 'ncc', you could cause 'ncc' to be used for all C
+compilations performed by the implicit rule. By redefining 'CFLAGS' to
+be '-g', you could pass the '-g' option to each compilation. _All_
+implicit rules that do C compilation use '$(CC)' to get the program name
+for the compiler and _all_ include '$(CFLAGS)' among the arguments given
+to the compiler.
+
+ The variables used in implicit rules fall into two classes: those
+that are names of programs (like 'CC') and those that contain arguments
+for the programs (like 'CFLAGS'). (The "name of a program" may also
+contain some command arguments, but it must start with an actual
+executable program name.) If a variable value contains more than one
+argument, separate them with spaces.
+
+ The following tables describe of some of the more commonly-used
+predefined variables. This list is not exhaustive, and the default
+values shown here may not be what 'make' selects for your environment.
+To see the complete list of predefined variables for your instance of
+GNU 'make' you can run 'make -p' in a directory with no makefiles.
+
+ Here is a table of some of the more common variables used as names of
+programs in built-in rules:
+
+'AR'
+ Archive-maintaining program; default 'ar'.
+
+'AS'
+ Program for compiling assembly files; default 'as'.
+
+'CC'
+ Program for compiling C programs; default 'cc'.
+
+'CXX'
+ Program for compiling C++ programs; default 'g++'.
+
+'CPP'
+ Program for running the C preprocessor, with results to standard
+ output; default '$(CC) -E'.
+
+'FC'
+ Program for compiling or preprocessing Fortran and Ratfor programs;
+ default 'f77'.
+
+'M2C'
+ Program to use to compile Modula-2 source code; default 'm2c'.
+
+'PC'
+ Program for compiling Pascal programs; default 'pc'.
+
+'CO'
+ Program for extracting a file from RCS; default 'co'.
+
+'GET'
+ Program for extracting a file from SCCS; default 'get'.
+
+'LEX'
+ Program to use to turn Lex grammars into source code; default
+ 'lex'.
+
+'YACC'
+ Program to use to turn Yacc grammars into source code; default
+ 'yacc'.
+
+'LINT'
+ Program to use to run lint on source code; default 'lint'.
+
+'MAKEINFO'
+ Program to convert a Texinfo source file into an Info file; default
+ 'makeinfo'.
+
+'TEX'
+ Program to make TeX DVI files from TeX source; default 'tex'.
+
+'TEXI2DVI'
+ Program to make TeX DVI files from Texinfo source; default
+ 'texi2dvi'.
+
+'WEAVE'
+ Program to translate Web into TeX; default 'weave'.
+
+'CWEAVE'
+ Program to translate C Web into TeX; default 'cweave'.
+
+'TANGLE'
+ Program to translate Web into Pascal; default 'tangle'.
+
+'CTANGLE'
+ Program to translate C Web into C; default 'ctangle'.
+
+'RM'
+ Command to remove a file; default 'rm -f'.
+
+ Here is a table of variables whose values are additional arguments
+for the programs above. The default values for all of these is the
+empty string, unless otherwise noted.
+
+'ARFLAGS'
+ Flags to give the archive-maintaining program; default 'rv'.
+
+'ASFLAGS'
+ Extra flags to give to the assembler (when explicitly invoked on a
+ '.s' or '.S' file).
+
+'CFLAGS'
+ Extra flags to give to the C compiler.
+
+'CXXFLAGS'
+ Extra flags to give to the C++ compiler.
+
+'COFLAGS'
+ Extra flags to give to the RCS 'co' program.
+
+'CPPFLAGS'
+ Extra flags to give to the C preprocessor and programs that use it
+ (the C and Fortran compilers).
+
+'FFLAGS'
+ Extra flags to give to the Fortran compiler.
+
+'GFLAGS'
+ Extra flags to give to the SCCS 'get' program.
+
+'LDFLAGS'
+ Extra flags to give to compilers when they are supposed to invoke
+ the linker, 'ld', such as '-L'. Libraries ('-lfoo') should be
+ added to the 'LDLIBS' variable instead.
+
+'LDLIBS'
+ Library flags or names given to compilers when they are supposed to
+ invoke the linker, 'ld'. 'LOADLIBES' is a deprecated (but still
+ supported) alternative to 'LDLIBS'. Non-library linker flags, such
+ as '-L', should go in the 'LDFLAGS' variable.
+
+'LFLAGS'
+ Extra flags to give to Lex.
+
+'YFLAGS'
+ Extra flags to give to Yacc.
+
+'PFLAGS'
+ Extra flags to give to the Pascal compiler.
+
+'RFLAGS'
+ Extra flags to give to the Fortran compiler for Ratfor programs.
+
+'LINTFLAGS'
+ Extra flags to give to lint.
+
+
+File: make.info, Node: Chained Rules, Next: Pattern Rules, Prev: Implicit Variables, Up: Implicit Rules
+
+10.4 Chains of Implicit Rules
+=============================
+
+Sometimes a file can be made by a sequence of implicit rules. For
+example, a file 'N.o' could be made from 'N.y' by running first Yacc and
+then 'cc'. Such a sequence is called a "chain".
+
+ If the file 'N.c' exists, or is mentioned in the makefile, no special
+searching is required: 'make' finds that the object file can be made by
+C compilation from 'N.c'; later on, when considering how to make 'N.c',
+the rule for running Yacc is used. Ultimately both 'N.c' and 'N.o' are
+updated.
+
+ However, even if 'N.c' does not exist and is not mentioned, 'make'
+knows how to envision it as the missing link between 'N.o' and 'N.y'!
+In this case, 'N.c' is called an "intermediate file". Once 'make' has
+decided to use the intermediate file, it is entered in the data base as
+if it had been mentioned in the makefile, along with the implicit rule
+that says how to create it.
+
+ Intermediate files are remade using their rules just like all other
+files. But intermediate files are treated differently in two ways.
+
+ The first difference is what happens if the intermediate file does
+not exist. If an ordinary file B does not exist, and 'make' considers a
+target that depends on B, it invariably creates B and then updates the
+target from B. But if B is an intermediate file, then 'make' can leave
+well enough alone. It won't bother updating B, or the ultimate target,
+unless some prerequisite of B is newer than that target or there is some
+other reason to update that target.
+
+ The second difference is that if 'make' _does_ create B in order to
+update something else, it deletes B later on after it is no longer
+needed. Therefore, an intermediate file which did not exist before
+'make' also does not exist after 'make'. 'make' reports the deletion to
+you by printing a 'rm -f' command showing which file it is deleting.
+
+ Ordinarily, a file cannot be intermediate if it is mentioned in the
+makefile as a target or prerequisite. However, you can explicitly mark
+a file as intermediate by listing it as a prerequisite of the special
+target '.INTERMEDIATE'. This takes effect even if the file is mentioned
+explicitly in some other way.
+
+ You can prevent automatic deletion of an intermediate file by marking
+it as a "secondary" file. To do this, list it as a prerequisite of the
+special target '.SECONDARY'. When a file is secondary, 'make' will not
+create the file merely because it does not already exist, but 'make'
+does not automatically delete the file. Marking a file as secondary
+also marks it as intermediate.
+
+ You can list the target pattern of an implicit rule (such as '%.o')
+as a prerequisite of the special target '.PRECIOUS' to preserve
+intermediate files made by implicit rules whose target patterns match
+that file's name; see *note Interrupts::.
+
+ A chain can involve more than two implicit rules. For example, it is
+possible to make a file 'foo' from 'RCS/foo.y,v' by running RCS, Yacc
+and 'cc'. Then both 'foo.y' and 'foo.c' are intermediate files that are
+deleted at the end.
+
+ No single implicit rule can appear more than once in a chain. This
+means that 'make' will not even consider such a ridiculous thing as
+making 'foo' from 'foo.o.o' by running the linker twice. This
+constraint has the added benefit of preventing any infinite loop in the
+search for an implicit rule chain.
+
+ There are some special implicit rules to optimize certain cases that
+would otherwise be handled by rule chains. For example, making 'foo'
+from 'foo.c' could be handled by compiling and linking with separate
+chained rules, using 'foo.o' as an intermediate file. But what actually
+happens is that a special rule for this case does the compilation and
+linking with a single 'cc' command. The optimized rule is used in
+preference to the step-by-step chain because it comes earlier in the
+ordering of rules.
+
+
+File: make.info, Node: Pattern Rules, Next: Last Resort, Prev: Chained Rules, Up: Implicit Rules
+
+10.5 Defining and Redefining Pattern Rules
+==========================================
+
+You define an implicit rule by writing a "pattern rule". A pattern rule
+looks like an ordinary rule, except that its target contains the
+character '%' (exactly one of them). The target is considered a pattern
+for matching file names; the '%' can match any nonempty substring, while
+other characters match only themselves. The prerequisites likewise use
+'%' to show how their names relate to the target name.
+
+ Thus, a pattern rule '%.o : %.c' says how to make any file 'STEM.o'
+from another file 'STEM.c'.
+
+ Note that expansion using '%' in pattern rules occurs *after* any
+variable or function expansions, which take place when the makefile is
+read. *Note How to Use Variables: Using Variables, and *note Functions
+for Transforming Text: Functions.
+
+* Menu:
+
+* Pattern Intro:: An introduction to pattern rules.
+* Pattern Examples:: Examples of pattern rules.
+* Automatic Variables:: How to use automatic variables in the
+ recipe of implicit rules.
+* Pattern Match:: How patterns match.
+* Match-Anything Rules:: Precautions you should take prior to
+ defining rules that can match any
+ target file whatever.
+* Canceling Rules:: How to override or cancel built-in rules.
+
+
+File: make.info, Node: Pattern Intro, Next: Pattern Examples, Prev: Pattern Rules, Up: Pattern Rules
+
+10.5.1 Introduction to Pattern Rules
+------------------------------------
+
+A pattern rule contains the character '%' (exactly one of them) in the
+target; otherwise, it looks exactly like an ordinary rule. The target
+is a pattern for matching file names; the '%' matches any nonempty
+substring, while other characters match only themselves.
+
+ For example, '%.c' as a pattern matches any file name that ends in
+'.c'. 's.%.c' as a pattern matches any file name that starts with 's.',
+ends in '.c' and is at least five characters long. (There must be at
+least one character to match the '%'.) The substring that the '%'
+matches is called the "stem".
+
+ '%' in a prerequisite of a pattern rule stands for the same stem that
+was matched by the '%' in the target. In order for the pattern rule to
+apply, its target pattern must match the file name under consideration
+and all of its prerequisites (after pattern substitution) must name
+files that exist or can be made. These files become prerequisites of
+the target.
+
+ Thus, a rule of the form
+
+ %.o : %.c ; RECIPE...
+
+specifies how to make a file 'N.o', with another file 'N.c' as its
+prerequisite, provided that 'N.c' exists or can be made.
+
+ There may also be prerequisites that do not use '%'; such a
+prerequisite attaches to every file made by this pattern rule. These
+unvarying prerequisites are useful occasionally.
+
+ A pattern rule need not have any prerequisites that contain '%', or
+in fact any prerequisites at all. Such a rule is effectively a general
+wildcard. It provides a way to make any file that matches the target
+pattern. *Note Last Resort::.
+
+ More than one pattern rule may match a target. In this case 'make'
+will choose the "best fit" rule. *Note How Patterns Match: Pattern
+Match.
+
+ Pattern rules may have more than one target. Unlike normal rules,
+this does not act as many different rules with the same prerequisites
+and recipe. If a pattern rule has multiple targets, 'make' knows that
+the rule's recipe is responsible for making all of the targets. The
+recipe is executed only once to make all the targets. When searching
+for a pattern rule to match a target, the target patterns of a rule
+other than the one that matches the target in need of a rule are
+incidental: 'make' worries only about giving a recipe and prerequisites
+to the file presently in question. However, when this file's recipe is
+run, the other targets are marked as having been updated themselves.
+
+
+File: make.info, Node: Pattern Examples, Next: Automatic Variables, Prev: Pattern Intro, Up: Pattern Rules
+
+10.5.2 Pattern Rule Examples
+----------------------------
+
+Here are some examples of pattern rules actually predefined in 'make'.
+First, the rule that compiles '.c' files into '.o' files:
+
+ %.o : %.c
+ $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
+
+defines a rule that can make any file 'X.o' from 'X.c'. The recipe uses
+the automatic variables '$@' and '$<' to substitute the names of the
+target file and the source file in each case where the rule applies
+(*note Automatic Variables::).
+
+ Here is a second built-in rule:
+
+ % :: RCS/%,v
+ $(CO) $(COFLAGS) $<
+
+defines a rule that can make any file 'X' whatsoever from a
+corresponding file 'X,v' in the sub-directory 'RCS'. Since the target
+is '%', this rule will apply to any file whatever, provided the
+appropriate prerequisite file exists. The double colon makes the rule
+"terminal", which means that its prerequisite may not be an intermediate
+file (*note Match-Anything Pattern Rules: Match-Anything Rules.).
+
+ This pattern rule has two targets:
+
+ %.tab.c %.tab.h: %.y
+ bison -d $<
+
+This tells 'make' that the recipe 'bison -d X.y' will make both
+'X.tab.c' and 'X.tab.h'. If the file 'foo' depends on the files
+'parse.tab.o' and 'scan.o' and the file 'scan.o' depends on the file
+'parse.tab.h', when 'parse.y' is changed, the recipe 'bison -d parse.y'
+will be executed only once, and the prerequisites of both 'parse.tab.o'
+and 'scan.o' will be satisfied. (Presumably the file 'parse.tab.o' will
+be recompiled from 'parse.tab.c' and the file 'scan.o' from 'scan.c',
+while 'foo' is linked from 'parse.tab.o', 'scan.o', and its other
+prerequisites, and it will execute happily ever after.)
+
+
+File: make.info, Node: Automatic Variables, Next: Pattern Match, Prev: Pattern Examples, Up: Pattern Rules
+
+10.5.3 Automatic Variables
+--------------------------
+
+Suppose you are writing a pattern rule to compile a '.c' file into a
+'.o' file: how do you write the 'cc' command so that it operates on the
+right source file name? You cannot write the name in the recipe,
+because the name is different each time the implicit rule is applied.
+
+ What you do is use a special feature of 'make', the "automatic
+variables". These variables have values computed afresh for each rule
+that is executed, based on the target and prerequisites of the rule. In
+this example, you would use '$@' for the object file name and '$<' for
+the source file name.
+
+ It's very important that you recognize the limited scope in which
+automatic variable values are available: they only have values within
+the recipe. In particular, you cannot use them anywhere within the
+target list of a rule; they have no value there and will expand to the
+empty string. Also, they cannot be accessed directly within the
+prerequisite list of a rule. A common mistake is attempting to use '$@'
+within the prerequisites list; this will not work. However, there is a
+special feature of GNU 'make', secondary expansion (*note Secondary
+Expansion::), which will allow automatic variable values to be used in
+prerequisite lists.
+
+ Here is a table of automatic variables:
+
+'$@'
+ The file name of the target of the rule. If the target is an
+ archive member, then '$@' is the name of the archive file. In a
+ pattern rule that has multiple targets (*note Introduction to
+ Pattern Rules: Pattern Intro.), '$@' is the name of whichever
+ target caused the rule's recipe to be run.
+
+'$%'
+ The target member name, when the target is an archive member.
+ *Note Archives::. For example, if the target is 'foo.a(bar.o)'
+ then '$%' is 'bar.o' and '$@' is 'foo.a'. '$%' is empty when the
+ target is not an archive member.
+
+'$<'
+ The name of the first prerequisite. If the target got its recipe
+ from an implicit rule, this will be the first prerequisite added by
+ the implicit rule (*note Implicit Rules::).
+
+'$?'
+ The names of all the prerequisites that are newer than the target,
+ with spaces between them. For prerequisites which are archive
+ members, only the named member is used (*note Archives::).
+
+'$^'
+ The names of all the prerequisites, with spaces between them. For
+ prerequisites which are archive members, only the named member is
+ used (*note Archives::). A target has only one prerequisite on
+ each other file it depends on, no matter how many times each file
+ is listed as a prerequisite. So if you list a prerequisite more
+ than once for a target, the value of '$^' contains just one copy of
+ the name. This list does *not* contain any of the order-only
+ prerequisites; for those see the '$|' variable, below.
+
+'$+'
+ This is like '$^', but prerequisites listed more than once are
+ duplicated in the order they were listed in the makefile. This is
+ primarily useful for use in linking commands where it is meaningful
+ to repeat library file names in a particular order.
+
+'$|'
+ The names of all the order-only prerequisites, with spaces between
+ them.
+
+'$*'
+ The stem with which an implicit rule matches (*note How Patterns
+ Match: Pattern Match.). If the target is 'dir/a.foo.b' and the
+ target pattern is 'a.%.b' then the stem is 'dir/foo'. The stem is
+ useful for constructing names of related files.
+
+ In a static pattern rule, the stem is part of the file name that
+ matched the '%' in the target pattern.
+
+ In an explicit rule, there is no stem; so '$*' cannot be determined
+ in that way. Instead, if the target name ends with a recognized
+ suffix (*note Old-Fashioned Suffix Rules: Suffix Rules.), '$*' is
+ set to the target name minus the suffix. For example, if the
+ target name is 'foo.c', then '$*' is set to 'foo', since '.c' is a
+ suffix. GNU 'make' does this bizarre thing only for compatibility
+ with other implementations of 'make'. You should generally avoid
+ using '$*' except in implicit rules or static pattern rules.
+
+ If the target name in an explicit rule does not end with a
+ recognized suffix, '$*' is set to the empty string for that rule.
+
+ '$?' is useful even in explicit rules when you wish to operate on
+only the prerequisites that have changed. For example, suppose that an
+archive named 'lib' is supposed to contain copies of several object
+files. This rule copies just the changed object files into the archive:
+
+ lib: foo.o bar.o lose.o win.o
+ ar r lib $?
+
+ Of the variables listed above, four have values that are single file
+names, and three have values that are lists of file names. These seven
+have variants that get just the file's directory name or just the file
+name within the directory. The variant variables' names are formed by
+appending 'D' or 'F', respectively. These variants are semi-obsolete in
+GNU 'make' since the functions 'dir' and 'notdir' can be used to get a
+similar effect (*note Functions for File Names: File Name Functions.).
+Note, however, that the 'D' variants all omit the trailing slash which
+always appears in the output of the 'dir' function. Here is a table of
+the variants:
+
+'$(@D)'
+ The directory part of the file name of the target, with the
+ trailing slash removed. If the value of '$@' is 'dir/foo.o' then
+ '$(@D)' is 'dir'. This value is '.' if '$@' does not contain a
+ slash.
+
+'$(@F)'
+ The file-within-directory part of the file name of the target. If
+ the value of '$@' is 'dir/foo.o' then '$(@F)' is 'foo.o'. '$(@F)'
+ is equivalent to '$(notdir $@)'.
+
+'$(*D)'
+'$(*F)'
+ The directory part and the file-within-directory part of the stem;
+ 'dir' and 'foo' in this example.
+
+'$(%D)'
+'$(%F)'
+ The directory part and the file-within-directory part of the target
+ archive member name. This makes sense only for archive member
+ targets of the form 'ARCHIVE(MEMBER)' and is useful only when
+ MEMBER may contain a directory name. (*Note Archive Members as
+ Targets: Archive Members.)
+
+'$(<D)'
+'$(<F)'
+ The directory part and the file-within-directory part of the first
+ prerequisite.
+
+'$(^D)'
+'$(^F)'
+ Lists of the directory parts and the file-within-directory parts of
+ all prerequisites.
+
+'$(+D)'
+'$(+F)'
+ Lists of the directory parts and the file-within-directory parts of
+ all prerequisites, including multiple instances of duplicated
+ prerequisites.
+
+'$(?D)'
+'$(?F)'
+ Lists of the directory parts and the file-within-directory parts of
+ all prerequisites that are newer than the target.
+
+ Note that we use a special stylistic convention when we talk about
+these automatic variables; we write "the value of '$<'", rather than "the variable '<'"
+as we would write for ordinary variables such as 'objects' and 'CFLAGS'.
+We think this convention looks more natural in this special case.
+Please do not assume it has a deep significance; '$<' refers to the
+variable named '<' just as '$(CFLAGS)' refers to the variable named
+'CFLAGS'. You could just as well use '$(<)' in place of '$<'.
+
+
+File: make.info, Node: Pattern Match, Next: Match-Anything Rules, Prev: Automatic Variables, Up: Pattern Rules
+
+10.5.4 How Patterns Match
+-------------------------
+
+A target pattern is composed of a '%' between a prefix and a suffix,
+either or both of which may be empty. The pattern matches a file name
+only if the file name starts with the prefix and ends with the suffix,
+without overlap. The text between the prefix and the suffix is called
+the "stem". Thus, when the pattern '%.o' matches the file name
+'test.o', the stem is 'test'. The pattern rule prerequisites are turned
+into actual file names by substituting the stem for the character '%'.
+Thus, if in the same example one of the prerequisites is written as
+'%.c', it expands to 'test.c'.
+
+ When the target pattern does not contain a slash (and it usually does
+not), directory names in the file names are removed from the file name
+before it is compared with the target prefix and suffix. After the
+comparison of the file name to the target pattern, the directory names,
+along with the slash that ends them, are added on to the prerequisite
+file names generated from the pattern rule's prerequisite patterns and
+the file name. The directories are ignored only for the purpose of
+finding an implicit rule to use, not in the application of that rule.
+Thus, 'e%t' matches the file name 'src/eat', with 'src/a' as the stem.
+When prerequisites are turned into file names, the directories from the
+stem are added at the front, while the rest of the stem is substituted
+for the '%'. The stem 'src/a' with a prerequisite pattern 'c%r' gives
+the file name 'src/car'.
+
+ A pattern rule can be used to build a given file only if there is a
+target pattern that matches the file name, _and_ all prerequisites in
+that rule either exist or can be built. The rules you write take
+precedence over those that are built in. Note however, that a rule
+whose prerequisites actually exist or are mentioned always takes
+priority over a rule with prerequisites that must be made by chaining
+other implicit rules.
+
+ It is possible that more than one pattern rule will meet these
+criteria. In that case, 'make' will choose the rule with the shortest
+stem (that is, the pattern that matches most specifically). If more
+than one pattern rule has the shortest stem, 'make' will choose the
+first one found in the makefile.
+
+ This algorithm results in more specific rules being preferred over
+more generic ones; for example:
+
+ %.o: %.c
+ $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
+
+ %.o : %.f
+ $(COMPILE.F) $(OUTPUT_OPTION) $<
+
+ lib/%.o: lib/%.c
+ $(CC) -fPIC -c $(CFLAGS) $(CPPFLAGS) $< -o $@
+
+ Given these rules and asked to build 'bar.o' where both 'bar.c' and
+'bar.f' exist, 'make' will choose the first rule and compile 'bar.c'
+into 'bar.o'. In the same situation where 'bar.c' does not exist, then
+'make' will choose the second rule and compile 'bar.f' into 'bar.o'.
+
+ If 'make' is asked to build 'lib/bar.o' and both 'lib/bar.c' and
+'lib/bar.f' exist, then the third rule will be chosen since the stem for
+this rule ('bar') is shorter than the stem for the first rule
+('lib/bar'). If 'lib/bar.c' does not exist then the third rule is not
+eligible and the second rule will be used, even though the stem is
+longer.
+
+
+File: make.info, Node: Match-Anything Rules, Next: Canceling Rules, Prev: Pattern Match, Up: Pattern Rules
+
+10.5.5 Match-Anything Pattern Rules
+-----------------------------------
+
+When a pattern rule's target is just '%', it matches any file name
+whatever. We call these rules "match-anything" rules. They are very
+useful, but it can take a lot of time for 'make' to think about them,
+because it must consider every such rule for each file name listed
+either as a target or as a prerequisite.
+
+ Suppose the makefile mentions 'foo.c'. For this target, 'make' would
+have to consider making it by linking an object file 'foo.c.o', or by C
+compilation-and-linking in one step from 'foo.c.c', or by Pascal
+compilation-and-linking from 'foo.c.p', and many other possibilities.
+
+ We know these possibilities are ridiculous since 'foo.c' is a C
+source file, not an executable. If 'make' did consider these
+possibilities, it would ultimately reject them, because files such as
+'foo.c.o' and 'foo.c.p' would not exist. But these possibilities are so
+numerous that 'make' would run very slowly if it had to consider them.
+
+ To gain speed, we have put various constraints on the way 'make'
+considers match-anything rules. There are two different constraints
+that can be applied, and each time you define a match-anything rule you
+must choose one or the other for that rule.
+
+ One choice is to mark the match-anything rule as "terminal" by
+defining it with a double colon. When a rule is terminal, it does not
+apply unless its prerequisites actually exist. Prerequisites that could
+be made with other implicit rules are not good enough. In other words,
+no further chaining is allowed beyond a terminal rule.
+
+ For example, the built-in implicit rules for extracting sources from
+RCS and SCCS files are terminal; as a result, if the file 'foo.c,v' does
+not exist, 'make' will not even consider trying to make it as an
+intermediate file from 'foo.c,v.o' or from 'RCS/SCCS/s.foo.c,v'. RCS
+and SCCS files are generally ultimate source files, which should not be
+remade from any other files; therefore, 'make' can save time by not
+looking for ways to remake them.
+
+ If you do not mark the match-anything rule as terminal, then it is
+non-terminal. A non-terminal match-anything rule cannot apply to a file
+name that indicates a specific type of data. A file name indicates a
+specific type of data if some non-match-anything implicit rule target
+matches it.
+
+ For example, the file name 'foo.c' matches the target for the pattern
+rule '%.c : %.y' (the rule to run Yacc). Regardless of whether this
+rule is actually applicable (which happens only if there is a file
+'foo.y'), the fact that its target matches is enough to prevent
+consideration of any non-terminal match-anything rules for the file
+'foo.c'. Thus, 'make' will not even consider trying to make 'foo.c' as
+an executable file from 'foo.c.o', 'foo.c.c', 'foo.c.p', etc.
+
+ The motivation for this constraint is that non-terminal
+match-anything rules are used for making files containing specific types
+of data (such as executable files) and a file name with a recognized
+suffix indicates some other specific type of data (such as a C source
+file).
+
+ Special built-in dummy pattern rules are provided solely to recognize
+certain file names so that non-terminal match-anything rules will not be
+considered. These dummy rules have no prerequisites and no recipes, and
+they are ignored for all other purposes. For example, the built-in
+implicit rule
+
+ %.p :
+
+exists to make sure that Pascal source files such as 'foo.p' match a
+specific target pattern and thereby prevent time from being wasted
+looking for 'foo.p.o' or 'foo.p.c'.
+
+ Dummy pattern rules such as the one for '%.p' are made for every
+suffix listed as valid for use in suffix rules (*note Old-Fashioned
+Suffix Rules: Suffix Rules.).
+
+
+File: make.info, Node: Canceling Rules, Prev: Match-Anything Rules, Up: Pattern Rules
+
+10.5.6 Canceling Implicit Rules
+-------------------------------
+
+You can override a built-in implicit rule (or one you have defined
+yourself) by defining a new pattern rule with the same target and
+prerequisites, but a different recipe. When the new rule is defined,
+the built-in one is replaced. The new rule's position in the sequence
+of implicit rules is determined by where you write the new rule.
+
+ You can cancel a built-in implicit rule by defining a pattern rule
+with the same target and prerequisites, but no recipe. For example, the
+following would cancel the rule that runs the assembler:
+
+ %.o : %.s
+
+
+File: make.info, Node: Last Resort, Next: Suffix Rules, Prev: Pattern Rules, Up: Implicit Rules
+
+10.6 Defining Last-Resort Default Rules
+=======================================
+
+You can define a last-resort implicit rule by writing a terminal
+match-anything pattern rule with no prerequisites (*note Match-Anything
+Rules::). This is just like any other pattern rule; the only thing
+special about it is that it will match any target. So such a rule's
+recipe is used for all targets and prerequisites that have no recipe of
+their own and for which no other implicit rule applies.
+
+ For example, when testing a makefile, you might not care if the
+source files contain real data, only that they exist. Then you might do
+this:
+
+ %::
+ touch $@
+
+to cause all the source files needed (as prerequisites) to be created
+automatically.
+
+ You can instead define a recipe to be used for targets for which
+there are no rules at all, even ones which don't specify recipes. You
+do this by writing a rule for the target '.DEFAULT'. Such a rule's
+recipe is used for all prerequisites which do not appear as targets in
+any explicit rule, and for which no implicit rule applies. Naturally,
+there is no '.DEFAULT' rule unless you write one.
+
+ If you use '.DEFAULT' with no recipe or prerequisites:
+
+ .DEFAULT:
+
+the recipe previously stored for '.DEFAULT' is cleared. Then 'make'
+acts as if you had never defined '.DEFAULT' at all.
+
+ If you do not want a target to get the recipe from a match-anything
+pattern rule or '.DEFAULT', but you also do not want any recipe to be
+run for the target, you can give it an empty recipe (*note Defining
+Empty Recipes: Empty Recipes.).
+
+ You can use a last-resort rule to override part of another makefile.
+*Note Overriding Part of Another Makefile: Overriding Makefiles.
+
+
+File: make.info, Node: Suffix Rules, Next: Implicit Rule Search, Prev: Last Resort, Up: Implicit Rules
+
+10.7 Old-Fashioned Suffix Rules
+===============================
+
+"Suffix rules" are the old-fashioned way of defining implicit rules for
+'make'. Suffix rules are obsolete because pattern rules are more
+general and clearer. They are supported in GNU 'make' for compatibility
+with old makefiles. They come in two kinds: "double-suffix" and
+"single-suffix".
+
+ A double-suffix rule is defined by a pair of suffixes: the target
+suffix and the source suffix. It matches any file whose name ends with
+the target suffix. The corresponding implicit prerequisite is made by
+replacing the target suffix with the source suffix in the file name. A
+two-suffix rule whose target and source suffixes are '.o' and '.c' is
+equivalent to the pattern rule '%.o : %.c'.
+
+ A single-suffix rule is defined by a single suffix, which is the
+source suffix. It matches any file name, and the corresponding implicit
+prerequisite name is made by appending the source suffix. A
+single-suffix rule whose source suffix is '.c' is equivalent to the
+pattern rule '% : %.c'.
+
+ Suffix rule definitions are recognized by comparing each rule's
+target against a defined list of known suffixes. When 'make' sees a
+rule whose target is a known suffix, this rule is considered a
+single-suffix rule. When 'make' sees a rule whose target is two known
+suffixes concatenated, this rule is taken as a double-suffix rule.
+
+ For example, '.c' and '.o' are both on the default list of known
+suffixes. Therefore, if you define a rule whose target is '.c.o',
+'make' takes it to be a double-suffix rule with source suffix '.c' and
+target suffix '.o'. Here is the old-fashioned way to define the rule
+for compiling a C source file:
+
+ .c.o:
+ $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<
+
+ Suffix rules cannot have any prerequisites of their own. If they
+have any, they are treated as normal files with funny names, not as
+suffix rules. Thus, the rule:
+
+ .c.o: foo.h
+ $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<
+
+tells how to make the file '.c.o' from the prerequisite file 'foo.h',
+and is not at all like the pattern rule:
+
+ %.o: %.c foo.h
+ $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<
+
+which tells how to make '.o' files from '.c' files, and makes all '.o'
+files using this pattern rule also depend on 'foo.h'.
+
+ Suffix rules with no recipe are also meaningless. They do not remove
+previous rules as do pattern rules with no recipe (*note Canceling
+Implicit Rules: Canceling Rules.). They simply enter the suffix or pair
+of suffixes concatenated as a target in the data base.
+
+ The known suffixes are simply the names of the prerequisites of the
+special target '.SUFFIXES'. You can add your own suffixes by writing a
+rule for '.SUFFIXES' that adds more prerequisites, as in:
+
+ .SUFFIXES: .hack .win
+
+which adds '.hack' and '.win' to the end of the list of suffixes.
+
+ If you wish to eliminate the default known suffixes instead of just
+adding to them, write a rule for '.SUFFIXES' with no prerequisites. By
+special dispensation, this eliminates all existing prerequisites of
+'.SUFFIXES'. You can then write another rule to add the suffixes you
+want. For example,
+
+ .SUFFIXES: # Delete the default suffixes
+ .SUFFIXES: .c .o .h # Define our suffix list
+
+ The '-r' or '--no-builtin-rules' flag causes the default list of
+suffixes to be empty.
+
+ The variable 'SUFFIXES' is defined to the default list of suffixes
+before 'make' reads any makefiles. You can change the list of suffixes
+with a rule for the special target '.SUFFIXES', but that does not alter
+this variable.
+
+
+File: make.info, Node: Implicit Rule Search, Prev: Suffix Rules, Up: Implicit Rules
+
+10.8 Implicit Rule Search Algorithm
+===================================
+
+Here is the procedure 'make' uses for searching for an implicit rule for
+a target T. This procedure is followed for each double-colon rule with
+no recipe, for each target of ordinary rules none of which have a
+recipe, and for each prerequisite that is not the target of any rule.
+It is also followed recursively for prerequisites that come from
+implicit rules, in the search for a chain of rules.
+
+ Suffix rules are not mentioned in this algorithm because suffix rules
+are converted to equivalent pattern rules once the makefiles have been
+read in.
+
+ For an archive member target of the form 'ARCHIVE(MEMBER)', the
+following algorithm is run twice, first using the entire target name T,
+and second using '(MEMBER)' as the target T if the first run found no
+rule.
+
+ 1. Split T into a directory part, called D, and the rest, called N.
+ For example, if T is 'src/foo.o', then D is 'src/' and N is
+ 'foo.o'.
+
+ 2. Make a list of all the pattern rules one of whose targets matches T
+ or N. If the target pattern contains a slash, it is matched
+ against T; otherwise, against N.
+
+ 3. If any rule in that list is _not_ a match-anything rule, then
+ remove all non-terminal match-anything rules from the list.
+
+ 4. Remove from the list all rules with no recipe.
+
+ 5. For each pattern rule in the list:
+
+ a. Find the stem S, which is the nonempty part of T or N matched
+ by the '%' in the target pattern.
+
+ b. Compute the prerequisite names by substituting S for '%'; if
+ the target pattern does not contain a slash, append D to the
+ front of each prerequisite name.
+
+ c. Test whether all the prerequisites exist or ought to exist.
+ (If a file name is mentioned in the makefile as a target or as
+ an explicit prerequisite, then we say it ought to exist.)
+
+ If all prerequisites exist or ought to exist, or there are no
+ prerequisites, then this rule applies.
+
+ 6. If no pattern rule has been found so far, try harder. For each
+ pattern rule in the list:
+
+ a. If the rule is terminal, ignore it and go on to the next rule.
+
+ b. Compute the prerequisite names as before.
+
+ c. Test whether all the prerequisites exist or ought to exist.
+
+ d. For each prerequisite that does not exist, follow this
+ algorithm recursively to see if the prerequisite can be made
+ by an implicit rule.
+
+ e. If all prerequisites exist, ought to exist, or can be made by
+ implicit rules, then this rule applies.
+
+ 7. If no implicit rule applies, the rule for '.DEFAULT', if any,
+ applies. In that case, give T the same recipe that '.DEFAULT' has.
+ Otherwise, there is no recipe for T.
+
+ Once a rule that applies has been found, for each target pattern of
+the rule other than the one that matched T or N, the '%' in the pattern
+is replaced with S and the resultant file name is stored until the
+recipe to remake the target file T is executed. After the recipe is
+executed, each of these stored file names are entered into the data base
+and marked as having been updated and having the same update status as
+the file T.
+
+ When the recipe of a pattern rule is executed for T, the automatic
+variables are set corresponding to the target and prerequisites. *Note
+Automatic Variables::.
+
+
+File: make.info, Node: Archives, Next: Extending make, Prev: Implicit Rules, Up: Top
+
+11 Using 'make' to Update Archive Files
+***************************************
+
+"Archive files" are files containing named sub-files called "members";
+they are maintained with the program 'ar' and their main use is as
+subroutine libraries for linking.
+
+* Menu:
+
+* Archive Members:: Archive members as targets.
+* Archive Update:: The implicit rule for archive member targets.
+* Archive Pitfalls:: Dangers to watch out for when using archives.
+* Archive Suffix Rules:: You can write a special kind of suffix rule
+ for updating archives.
+
+
+File: make.info, Node: Archive Members, Next: Archive Update, Prev: Archives, Up: Archives
+
+11.1 Archive Members as Targets
+===============================
+
+An individual member of an archive file can be used as a target or
+prerequisite in 'make'. You specify the member named MEMBER in archive
+file ARCHIVE as follows:
+
+ ARCHIVE(MEMBER)
+
+This construct is available only in targets and prerequisites, not in
+recipes! Most programs that you might use in recipes do not support
+this syntax and cannot act directly on archive members. Only 'ar' and
+other programs specifically designed to operate on archives can do so.
+Therefore, valid recipes to update an archive member target probably
+must use 'ar'. For example, this rule says to create a member 'hack.o'
+in archive 'foolib' by copying the file 'hack.o':
+
+ foolib(hack.o) : hack.o
+ ar cr foolib hack.o
+
+ In fact, nearly all archive member targets are updated in just this
+way and there is an implicit rule to do it for you. *Please note:* The
+'c' flag to 'ar' is required if the archive file does not already exist.
+
+ To specify several members in the same archive, you can write all the
+member names together between the parentheses. For example:
+
+ foolib(hack.o kludge.o)
+
+is equivalent to:
+
+ foolib(hack.o) foolib(kludge.o)
+
+ You can also use shell-style wildcards in an archive member
+reference. *Note Using Wildcard Characters in File Names: Wildcards.
+For example, 'foolib(*.o)' expands to all existing members of the
+'foolib' archive whose names end in '.o'; perhaps 'foolib(hack.o)
+foolib(kludge.o)'.
+
+
+File: make.info, Node: Archive Update, Next: Archive Pitfalls, Prev: Archive Members, Up: Archives
+
+11.2 Implicit Rule for Archive Member Targets
+=============================================
+
+Recall that a target that looks like 'A(M)' stands for the member named
+M in the archive file A.
+
+ When 'make' looks for an implicit rule for such a target, as a
+special feature it considers implicit rules that match '(M)', as well as
+those that match the actual target 'A(M)'.
+
+ This causes one special rule whose target is '(%)' to match. This
+rule updates the target 'A(M)' by copying the file M into the archive.
+For example, it will update the archive member target 'foo.a(bar.o)' by
+copying the _file_ 'bar.o' into the archive 'foo.a' as a _member_ named
+'bar.o'.
+
+ When this rule is chained with others, the result is very powerful.
+Thus, 'make "foo.a(bar.o)"' (the quotes are needed to protect the '('
+and ')' from being interpreted specially by the shell) in the presence
+of a file 'bar.c' is enough to cause the following recipe to be run,
+even without a makefile:
+
+ cc -c bar.c -o bar.o
+ ar r foo.a bar.o
+ rm -f bar.o
+
+Here 'make' has envisioned the file 'bar.o' as an intermediate file.
+*Note Chains of Implicit Rules: Chained Rules.
+
+ Implicit rules such as this one are written using the automatic
+variable '$%'. *Note Automatic Variables::.
+
+ An archive member name in an archive cannot contain a directory name,
+but it may be useful in a makefile to pretend that it does. If you
+write an archive member target 'foo.a(dir/file.o)', 'make' will perform
+automatic updating with this recipe:
+
+ ar r foo.a dir/file.o
+
+which has the effect of copying the file 'dir/file.o' into a member
+named 'file.o'. In connection with such usage, the automatic variables
+'%D' and '%F' may be useful.
+
+* Menu:
+
+* Archive Symbols:: How to update archive symbol directories.
+
+
+File: make.info, Node: Archive Symbols, Prev: Archive Update, Up: Archive Update
+
+11.2.1 Updating Archive Symbol Directories
+------------------------------------------
+
+An archive file that is used as a library usually contains a special
+member named '__.SYMDEF' that contains a directory of the external
+symbol names defined by all the other members. After you update any
+other members, you need to update '__.SYMDEF' so that it will summarize
+the other members properly. This is done by running the 'ranlib'
+program:
+
+ ranlib ARCHIVEFILE
+
+ Normally you would put this command in the rule for the archive file,
+and make all the members of the archive file prerequisites of that rule.
+For example,
+
+ libfoo.a: libfoo.a(x.o) libfoo.a(y.o) ...
+ ranlib libfoo.a
+
+The effect of this is to update archive members 'x.o', 'y.o', etc., and
+then update the symbol directory member '__.SYMDEF' by running 'ranlib'.
+The rules for updating the members are not shown here; most likely you
+can omit them and use the implicit rule which copies files into the
+archive, as described in the preceding section.
+
+ This is not necessary when using the GNU 'ar' program, which updates
+the '__.SYMDEF' member automatically.
+
+
+File: make.info, Node: Archive Pitfalls, Next: Archive Suffix Rules, Prev: Archive Update, Up: Archives
+
+11.3 Dangers When Using Archives
+================================
+
+It is important to be careful when using parallel execution (the '-j'
+switch; *note Parallel Execution: Parallel.) and archives. If multiple
+'ar' commands run at the same time on the same archive file, they will
+not know about each other and can corrupt the file.
+
+ Possibly a future version of 'make' will provide a mechanism to
+circumvent this problem by serializing all recipes that operate on the
+same archive file. But for the time being, you must either write your
+makefiles to avoid this problem in some other way, or not use '-j'.
+
+
+File: make.info, Node: Archive Suffix Rules, Prev: Archive Pitfalls, Up: Archives
+
+11.4 Suffix Rules for Archive Files
+===================================
+
+You can write a special kind of suffix rule for dealing with archive
+files. *Note Suffix Rules::, for a full explanation of suffix rules.
+Archive suffix rules are obsolete in GNU 'make', because pattern rules
+for archives are a more general mechanism (*note Archive Update::). But
+they are retained for compatibility with other 'make's.
+
+ To write a suffix rule for archives, you simply write a suffix rule
+using the target suffix '.a' (the usual suffix for archive files). For
+example, here is the old-fashioned suffix rule to update a library
+archive from C source files:
+
+ .c.a:
+ $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $*.o
+ $(AR) r $@ $*.o
+ $(RM) $*.o
+
+This works just as if you had written the pattern rule:
+
+ (%.o): %.c
+ $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $*.o
+ $(AR) r $@ $*.o
+ $(RM) $*.o
+
+ In fact, this is just what 'make' does when it sees a suffix rule
+with '.a' as the target suffix. Any double-suffix rule '.X.a' is
+converted to a pattern rule with the target pattern '(%.o)' and a
+prerequisite pattern of '%.X'.
+
+ Since you might want to use '.a' as the suffix for some other kind of
+file, 'make' also converts archive suffix rules to pattern rules in the
+normal way (*note Suffix Rules::). Thus a double-suffix rule '.X.a'
+produces two pattern rules: '(%.o): %.X' and '%.a: %.X'.
+
+
+File: make.info, Node: Extending make, Next: Features, Prev: Archives, Up: Top
+
+12 Extending GNU 'make'
+***********************
+
+GNU 'make' provides many advanced capabilities, including many useful
+functions. However, it does not contain a complete programming language
+and so it has limitations. Sometimes these limitations can be overcome
+through use of the 'shell' function to invoke a separate program,
+although this can be inefficient.
+
+ In cases where the built-in capabilities of GNU 'make' are
+insufficient to your requirements there are two options for extending
+'make'. On systems where it's provided, you can utilize GNU Guile as an
+embedded scripting language (*note GNU Guile Integration: Guile
+Integration.). On systems which support dynamically loadable objects,
+you can write your own extension in any language (which can be compiled
+into such an object) and load it to provide extended capabilities (*note
+The 'load' Directive: load Directive.).
+
+* Menu:
+
+* Guile Integration:: Using Guile as an embedded scripting language.
+* Loading Objects:: Loading dynamic objects as extensions.
+
+
+File: make.info, Node: Guile Integration, Next: Loading Objects, Prev: Extending make, Up: Extending make
+
+12.1 GNU Guile Integration
+==========================
+
+GNU 'make' may be built with support for GNU Guile as an embedded
+extension language. Guile implements the Scheme language. A review of
+GNU Guile and the Scheme language and its features is beyond the scope
+of this manual: see the documentation for GNU Guile and Scheme.
+
+ You can determine if 'make' contains support for Guile by examining
+the '.FEATURES' variable; it will contain the word GUILE if Guile
+support is available.
+
+ The Guile integration provides one new 'make' function: 'guile'. The
+'guile' function takes one argument which is first expanded by 'make' in
+the normal fashion, then passed to the GNU Guile evaluator. The result
+of the evaluator is converted into a string and used as the expansion of
+the 'guile' function in the makefile.
+
+ In addition, GNU 'make' exposes Guile procedures for use in Guile
+scripts.
+
+* Menu:
+
+* Guile Types:: Converting Guile types to 'make' strings.
+* Guile Interface:: Invoking 'make' functions from Guile.
+* Guile Example:: Example using Guile in 'make'.
+
+
+File: make.info, Node: Guile Types, Next: Guile Interface, Prev: Guile Integration, Up: Guile Integration
+
+12.1.1 Conversion of Guile Types
+--------------------------------
+
+There is only one "data type" in 'make': a string. GNU Guile, on the
+other hand, provides a rich variety of different data types. An
+important aspect of the interface between 'make' and GNU Guile is the
+conversion of Guile data types into 'make' strings.
+
+ This conversion is relevant in two places: when a makefile invokes
+the 'guile' function to evaluate a Guile expression, the result of that
+evaluation must be converted into a make string so it can be further
+evaluated by 'make'. And secondly, when a Guile script invokes one of
+the procedures exported by 'make' the argument provided to the procedure
+must be converted into a string.
+
+ The conversion of Guile types into 'make' strings is as below:
+
+'#f'
+ False is converted into the empty string: in 'make' conditionals
+ the empty string is considered false.
+
+'#t'
+ True is converted to the string '#t': in 'make' conditionals any
+ non-empty string is considered true.
+
+'symbol'
+'number'
+ A symbol or number is converted into the string representation of
+ that symbol or number.
+
+'character'
+ A printable character is converted to the same character.
+
+'string'
+ A string containing only printable characters is converted to the
+ same string.
+
+'list'
+ A list is converted recursively according to the above rules. This
+ implies that any structured list will be flattened (that is, a
+ result of ''(a b (c d) e)' will be converted to the 'make' string
+ 'a b c d e').
+
+'other'
+ Any other Guile type results in an error. In future versions of
+ 'make', other Guile types may be converted.
+
+ The translation of '#f' (to the empty string) and '#t' (to the
+non-empty string '#t') is designed to allow you to use Guile boolean
+results directly as 'make' boolean conditions. For example:
+
+ $(if $(guile (access? "myfile" R_OK)),$(info myfile exists))
+
+ As a consequence of these conversion rules you must consider the
+result of your Guile script, as that result will be converted into a
+string and parsed by 'make'. If there is no natural result for the
+script (that is, the script exists solely for its side-effects), you
+should add '#f' as the final expression in order to avoid syntax errors
+in your makefile.
+
+
+File: make.info, Node: Guile Interface, Next: Guile Example, Prev: Guile Types, Up: Guile Integration
+
+12.1.2 Interfaces from Guile to 'make'
+--------------------------------------
+
+In addition to the 'guile' function available in makefiles, 'make'
+exposes some procedures for use in your Guile scripts. At startup
+'make' creates a new Guile module, 'gnu make', and exports these
+procedures as public interfaces from that module:
+
+'gmk-expand'
+ This procedure takes a single argument which is converted into a
+ string. The string is expanded by 'make' using normal 'make'
+ expansion rules. The result of the expansion is converted into a
+ Guile string and provided as the result of the procedure.
+
+'gmk-eval'
+ This procedure takes a single argument which is converted into a
+ string. The string is evaluated by 'make' as if it were a
+ makefile. This is the same capability available via the 'eval'
+ function (*note Eval Function::). The result of the 'gmk-eval'
+ procedure is always the empty string.
+
+ Note that 'gmk-eval' is not quite the same as using 'gmk-expand'
+ with the 'eval' function: in the latter case the evaluated string
+ will be expanded _twice_; first by 'gmk-expand', then again by the
+ 'eval' function.
+
+
+File: make.info, Node: Guile Example, Prev: Guile Interface, Up: Guile Integration
+
+12.1.3 Example Using Guile in 'make'
+------------------------------------
+
+Here is a very simple example using GNU Guile to manage writing to a
+file. These Guile procedures simply open a file, allow writing to the
+file (one string per line), and close the file. Note that because we
+cannot store complex values such as Guile ports in 'make' variables,
+we'll keep the port as a global variable in the Guile interpreter.
+
+ You can create Guile functions easily using 'define'/'endef' to
+create a Guile script, then use the 'guile' function to internalize it:
+
+ define GUILEIO
+ ;; A simple Guile IO library for GNU make
+
+ (define MKPORT #f)
+
+ (define (mkopen name mode)
+ (set! MKPORT (open-file name mode))
+ #f)
+
+ (define (mkwrite s)
+ (display s MKPORT)
+ (newline MKPORT)
+ #f)
+
+ (define (mkclose)
+ (close-port MKPORT)
+ #f)
+
+ #f
+ endef
+
+ # Internalize the Guile IO functions
+ $(guile $(GUILEIO))
+
+ If you have a significant amount of Guile support code, you might
+consider keeping it in a different file (e.g., 'guileio.scm') and then
+loading it in your makefile using the 'guile' function:
+
+ $(guile (load "guileio.scm"))
+
+ An advantage to this method is that when editing 'guileio.scm', your
+editor will understand that this file contains Scheme syntax rather than
+makefile syntax.
+
+ Now you can use these Guile functions to create files. Suppose you
+need to operate on a very large list, which cannot fit on the command
+line, but the utility you're using accepts the list as input as well:
+
+ prog: $(PREREQS)
+ @$(guile (mkopen "tmp.out" "w")) \
+ $(foreach X,$^,$(guile (mkwrite "$(X)"))) \
+ $(guile (mkclose))
+ $(LINK) < tmp.out
+
+ A more comprehensive suite of file manipulation procedures is
+possible of course. You could, for example, maintain multiple output
+files at the same time by choosing a symbol for each one and using it as
+the key to a hash table, where the value is a port, then returning the
+symbol to be stored in a 'make' variable.
+
+
+File: make.info, Node: Loading Objects, Prev: Guile Integration, Up: Extending make
+
+12.2 Loading Dynamic Objects
+============================
+
+ Warning: The 'load' directive and extension capability is
+ considered a "technology preview" in this release of GNU make. We
+ encourage you to experiment with this feature and we appreciate any
+ feedback on it. However we cannot guarantee to maintain
+ backward-compatibility in the next release. Consider using GNU
+ Guile instead for extending GNU make (*note The 'guile' Function:
+ Guile Function.).
+
+ Many operating systems provide a facility for dynamically loading
+compiled objects. If your system provides this facility, GNU 'make' can
+make use of it to load dynamic objects at runtime, providing new
+capabilities which may then be invoked by your makefile.
+
+ The 'load' directive is used to load a dynamic object. Once the
+object is loaded, a "setup" function will be invoked to allow the object
+to initialize itself and register new facilities with GNU 'make'. A
+dynamic object might include new 'make' functions, for example, and the
+"setup" function would register them with GNU 'make''s function handling
+system.
+
+* Menu:
+
+* load Directive:: Loading dynamic objects as extensions.
+* Remaking Loaded Objects:: How loaded objects get remade.
+* Loaded Object API:: Programmatic interface for loaded objects.
+* Loaded Object Example:: Example of a loaded object
+
+
+File: make.info, Node: load Directive, Next: Remaking Loaded Objects, Prev: Loading Objects, Up: Loading Objects
+
+12.2.1 The 'load' Directive
+---------------------------
+
+Objects are loaded into GNU 'make' by placing the 'load' directive into
+your makefile. The syntax of the 'load' directive is as follows:
+
+ load OBJECT-FILE ...
+
+ or:
+
+ load OBJECT-FILE(SYMBOL-NAME) ...
+
+ The file OBJECT-FILE is dynamically loaded by GNU 'make'. If
+OBJECT-FILE does not include a directory path then it is first looked
+for in the current directory. If it is not found there, or a directory
+path is included, then system-specific paths will be searched. If the
+load fails for any reason, 'make' will print a message and exit.
+
+ If the load succeeds 'make' will invoke an initializing function.
+
+ If SYMBOL-NAME is provided, it will be used as the name of the
+initializing function.
+
+ If no SYMBOL-NAME is provided, the initializing function name is
+created by taking the base file name of OBJECT-FILE, up to the first
+character which is not a valid symbol name character (alphanumerics and
+underscores are valid symbol name characters). To this prefix will be
+appended the suffix '_gmk_setup'.
+
+ More than one object file may be loaded with a single 'load'
+directive, and both forms of 'load' arguments may be used in the same
+directive.
+
+ The initializing function will be provided the file name and line
+number of the invocation of the 'load' operation. It should return a
+value of type 'int', which must be '0' on failure and non-'0' on
+success. If the return value is '-1', then GNU make will _not_ attempt
+to rebuild the object file (*note How Loaded Objects Are Remade:
+Remaking Loaded Objects.).
+
+ For example:
+
+ load ../mk_funcs.so
+
+ will load the dynamic object '../mk_funcs.so'. After the object is
+loaded, 'make' will invoke the function (assumed to be defined by the
+shared object) 'mk_funcs_gmk_setup'.
+
+ On the other hand:
+
+ load ../mk_funcs.so(init_mk_func)
+
+ will load the dynamic object '../mk_funcs.so'. After the object is
+loaded, 'make' will invoke the function 'init_mk_func'.
+
+ Regardless of how many times an object file appears in a 'load'
+directive, it will only be loaded (and its setup function will only be
+invoked) once.
+
+ After an object has been successfully loaded, its file name is
+appended to the '.LOADED' variable.
+
+ If you would prefer that failure to load a dynamic object not be
+reported as an error, you can use the '-load' directive instead of
+'load'. GNU 'make' will not fail and no message will be generated if an
+object fails to load. The failed object is not added to the '.LOADED'
+variable, which can then be consulted to determine if the load was
+successful.
+
+
+File: make.info, Node: Remaking Loaded Objects, Next: Loaded Object API, Prev: load Directive, Up: Loading Objects
+
+12.2.2 How Loaded Objects Are Remade
+------------------------------------
+
+Loaded objects undergo the same re-make procedure as makefiles (*note
+How Makefiles Are Remade: Remaking Makefiles.). If any loaded object is
+recreated, then 'make' will start from scratch and re-read all the
+makefiles, and reload the object files again. It is not necessary for
+the loaded object to do anything special to support this.
+
+ It's up to the makefile author to provide the rules needed for
+rebuilding the loaded object.
+
+
+File: make.info, Node: Loaded Object API, Next: Loaded Object Example, Prev: Remaking Loaded Objects, Up: Loading Objects
+
+12.2.3 Loaded Object Interface
+------------------------------
+
+ Warning: For this feature to be useful your extensions will need to
+ invoke various functions internal to GNU 'make'. The programming
+ interfaces provided in this release should not be considered
+ stable: functions may be added, removed, or change calling
+ signatures or implementations in future versions of GNU 'make'.
+
+ To be useful, loaded objects must be able to interact with GNU
+'make'. This interaction includes both interfaces the loaded object
+provides to makefiles and also interfaces 'make' provides to the loaded
+object to manipulate 'make''s operation.
+
+ The interface between loaded objects and 'make' is defined by the
+'gnumake.h' C header file. All loaded objects written in C should
+include this header file. Any loaded object not written in C will need
+to implement the interface defined in this header file.
+
+ Typically, a loaded object will register one or more new GNU 'make'
+functions using the 'gmk_add_function' routine from within its setup
+function. The implementations of these 'make' functions may make use of
+the 'gmk_expand' and 'gmk_eval' routines to perform their tasks, then
+optionally return a string as the result of the function expansion.
+
+Loaded Object Licensing
+.......................
+
+Every dynamic extension should define the global symbol
+'plugin_is_GPL_compatible' to assert that it has been licensed under a
+GPL-compatible license. If this symbol does not exist, 'make' emits a
+fatal error and exits when it tries to load your extension.
+
+ The declared type of the symbol should be 'int'. It does not need to
+be in any allocated section, though. The code merely asserts that the
+symbol exists in the global scope. Something like this is enough:
+
+ int plugin_is_GPL_compatible;
+
+Data Structures
+...............
+
+'gmk_floc'
+ This structure represents a filename/location pair. It is provided
+ when defining items, so GNU 'make' can inform the user later where
+ the definition occurred if necessary.
+
+Registering Functions
+.....................
+
+There is currently one way for makefiles to invoke operations provided
+by the loaded object: through the 'make' function call interface. A
+loaded object can register one or more new functions which may then be
+invoked from within the makefile in the same way as any other function.
+
+ Use 'gmk_add_function' to create a new 'make' function. Its
+arguments are as follows:
+
+'name'
+ The function name. This is what the makefile should use to invoke
+ the function. The name must be between 1 and 255 characters long
+ and it may only contain alphanumeric, period ('.'), dash ('-'), and
+ underscore ('_') characters. It may not begin with a period.
+
+'func_ptr'
+ A pointer to a function that 'make' will invoke when it expands the
+ function in a makefile. This function must be defined by the
+ loaded object.
+
+'min_args'
+ The minimum number of arguments the function will accept. Must be
+ between 0 and 255. GNU 'make' will check this and fail before
+ invoking 'func_ptr' if the function was invoked with too few
+ arguments.
+
+'max_args'
+ The maximum number of arguments the function will accept. Must be
+ between 0 and 255. GNU 'make' will check this and fail before
+ invoking 'func_ptr' if the function was invoked with too few
+ arguments. If the value is 0, then any number of arguments is
+ accepted. If the value is greater than 0, then it must be greater
+ than or equal to 'min_args'.
+
+'flags'
+ Flags that specify how this function will operate; the desired
+ flags should be OR'd together. If the 'GMK_FUNC_NOEXPAND' flag is
+ given then the function arguments will not be expanded before the
+ function is called; otherwise they will be expanded first.
+
+Registered Function Interface
+.............................
+
+A function registered with 'make' must match the 'gmk_func_ptr' type.
+It will be invoked with three parameters: 'name' (the name of the
+function), 'argc' (the number of arguments to the function), and 'argv'
+(an array of pointers to arguments to the function). The last pointer
+(that is, 'argv[argc]') will be null ('0').
+
+ The return value of the function is the result of expanding the
+function. If the function expands to nothing the return value may be
+null. Otherwise, it must be a pointer to a string created with
+'gmk_alloc'. Once the function returns, 'make' owns this string and
+will free it when appropriate; it cannot be accessed by the loaded
+object.
+
+GNU 'make' Facilities
+.....................
+
+There are some facilities exported by GNU 'make' for use by loaded
+objects. Typically these would be run from within the setup function
+and/or the functions registered via 'gmk_add_function', to retrieve or
+modify the data 'make' works with.
+
+'gmk_expand'
+ This function takes a string and expands it using 'make' expansion
+ rules. The result of the expansion is returned in a nil-terminated
+ string buffer. The caller is responsible for calling 'gmk_free'
+ with a pointer to the returned buffer when done.
+
+'gmk_eval'
+ This function takes a buffer and evaluates it as a segment of
+ makefile syntax. This function can be used to define new
+ variables, new rules, etc. It is equivalent to using the 'eval'
+ 'make' function.
+
+ Note that there is a difference between 'gmk_eval' and calling
+'gmk_expand' with a string using the 'eval' function: in the latter case
+the string will be expanded _twice_; once by 'gmk_expand' and then again
+by the 'eval' function. Using 'gmk_eval' the buffer is only expanded
+once, at most (as it's read by the 'make' parser).
+
+Memory Management
+.................
+
+Some systems allow for different memory management schemes. Thus you
+should never pass memory that you've allocated directly to any 'make'
+function, nor should you attempt to directly free any memory returned to
+you by any 'make' function. Instead, use the 'gmk_alloc' and 'gmk_free'
+functions.
+
+ In particular, the string returned to 'make' by a function registered
+using 'gmk_add_function' _must_ be allocated using 'gmk_alloc', and the
+string returned from the 'make' 'gmk_expand' function _must_ be freed
+(when no longer needed) using 'gmk_free'.
+
+'gmk_alloc'
+ Return a pointer to a newly-allocated buffer. This function will
+ always return a valid pointer; if not enough memory is available
+ 'make' will exit.
+
+'gmk_free'
+ Free a buffer returned to you by 'make'. Once the 'gmk_free'
+ function returns the string will no longer be valid.
+
+
+File: make.info, Node: Loaded Object Example, Prev: Loaded Object API, Up: Loading Objects
+
+12.2.4 Example Loaded Object
+----------------------------
+
+Let's suppose we wanted to write a new GNU 'make' function that would
+create a temporary file and return its name. We would like our function
+to take a prefix as an argument. First we can write the function in a
+file 'mk_temp.c':
+
+ #include <stdlib.h>
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <string.h>
+ #include <unistd.h>
+ #include <errno.h>
+
+ #include <gnumake.h>
+
+ int plugin_is_GPL_compatible;
+
+ char *
+ gen_tmpfile(const char *nm, int argc, char **argv)
+ {
+ int fd;
+
+ /* Compute the size of the filename and allocate space for it. */
+ int len = strlen (argv[0]) + 6 + 1;
+ char *buf = gmk_alloc (len);
+
+ strcpy (buf, argv[0]);
+ strcat (buf, "XXXXXX");
+
+ fd = mkstemp(buf);
+ if (fd >= 0)
+ {
+ /* Don't leak the file descriptor. */
+ close (fd);
+ return buf;
+ }
+
+ /* Failure. */
+ fprintf (stderr, "mkstemp(%s) failed: %s\n", buf, strerror (errno));
+ gmk_free (buf);
+ return NULL;
+ }
+
+ int
+ mk_temp_gmk_setup ()
+ {
+ /* Register the function with make name "mk-temp". */
+ gmk_add_function ("mk-temp", gen_tmpfile, 1, 1, 1);
+ return 1;
+ }
+
+ Next, we will write a makefile that can build this shared object,
+load it, and use it:
+
+ all:
+ @echo Temporary file: $(mk-temp tmpfile.)
+
+ load mk_temp.so
+
+ mk_temp.so: mk_temp.c
+ $(CC) -shared -fPIC -o $ $<
+
+ On MS-Windows, due to peculiarities of how shared objects are
+produced, the compiler needs to scan the "import library" produced when
+building 'make', typically called 'libgnumake-VERSION.dll.a', where
+VERSION is the version of the load object API. So the recipe to produce
+a shared object will look on Windows like this (assuming the API version
+is 1):
+
+ mk_temp.dll: mk_temp.c
+ $(CC) -shared -o $ $< -lgnumake-1
+
+ Now when you run 'make' you'll see something like:
+
+ $ make
+ cc -shared -fPIC -o mk_temp.so mk_temp.c
+ Temporary filename: tmpfile.A7JEwd
+
+
+File: make.info, Node: Features, Next: Missing, Prev: Extending make, Up: Top
+
+13 Features of GNU 'make'
+*************************
+
+Here is a summary of the features of GNU 'make', for comparison with and
+credit to other versions of 'make'. We consider the features of 'make'
+in 4.2 BSD systems as a baseline. If you are concerned with writing
+portable makefiles, you should not use the features of 'make' listed
+here, nor the ones in *note Missing::.
+
+ Many features come from the version of 'make' in System V.
+
+ * The 'VPATH' variable and its special meaning. *Note Searching
+ Directories for Prerequisites: Directory Search. This feature
+ exists in System V 'make', but is undocumented. It is documented
+ in 4.3 BSD 'make' (which says it mimics System V's 'VPATH'
+ feature).
+
+ * Included makefiles. *Note Including Other Makefiles: Include.
+ Allowing multiple files to be included with a single directive is a
+ GNU extension.
+
+ * Variables are read from and communicated via the environment.
+ *Note Variables from the Environment: Environment.
+
+ * Options passed through the variable 'MAKEFLAGS' to recursive
+ invocations of 'make'. *Note Communicating Options to a
+ Sub-'make': Options/Recursion.
+
+ * The automatic variable '$%' is set to the member name in an archive
+ reference. *Note Automatic Variables::.
+
+ * The automatic variables '$@', '$*', '$<', '$%', and '$?' have
+ corresponding forms like '$(@F)' and '$(@D)'. We have generalized
+ this to '$^' as an obvious extension. *Note Automatic Variables::.
+
+ * Substitution variable references. *Note Basics of Variable
+ References: Reference.
+
+ * The command line options '-b' and '-m', accepted and ignored. In
+ System V 'make', these options actually do something.
+
+ * Execution of recursive commands to run 'make' via the variable
+ 'MAKE' even if '-n', '-q' or '-t' is specified. *Note Recursive
+ Use of 'make': Recursion.
+
+ * Support for suffix '.a' in suffix rules. *Note Archive Suffix
+ Rules::. This feature is obsolete in GNU 'make', because the
+ general feature of rule chaining (*note Chains of Implicit Rules:
+ Chained Rules.) allows one pattern rule for installing members in
+ an archive (*note Archive Update::) to be sufficient.
+
+ * The arrangement of lines and backslash/newline combinations in
+ recipes is retained when the recipes are printed, so they appear as
+ they do in the makefile, except for the stripping of initial
+ whitespace.
+
+ The following features were inspired by various other versions of
+'make'. In some cases it is unclear exactly which versions inspired
+which others.
+
+ * Pattern rules using '%'. This has been implemented in several
+ versions of 'make'. We're not sure who invented it first, but it's
+ been spread around a bit. *Note Defining and Redefining Pattern
+ Rules: Pattern Rules.
+
+ * Rule chaining and implicit intermediate files. This was
+ implemented by Stu Feldman in his version of 'make' for AT&T Eighth
+ Edition Research Unix, and later by Andrew Hume of AT&T Bell Labs
+ in his 'mk' program (where he terms it "transitive closure"). We
+ do not really know if we got this from either of them or thought it
+ up ourselves at the same time. *Note Chains of Implicit Rules:
+ Chained Rules.
+
+ * The automatic variable '$^' containing a list of all prerequisites
+ of the current target. We did not invent this, but we have no idea
+ who did. *Note Automatic Variables::. The automatic variable '$+'
+ is a simple extension of '$^'.
+
+ * The "what if" flag ('-W' in GNU 'make') was (as far as we know)
+ invented by Andrew Hume in 'mk'. *Note Instead of Executing
+ Recipes: Instead of Execution.
+
+ * The concept of doing several things at once (parallelism) exists in
+ many incarnations of 'make' and similar programs, though not in the
+ System V or BSD implementations. *Note Recipe Execution:
+ Execution.
+
+ * A number of different build tools that support parallelism also
+ support collecting output and displaying as a single block. *Note
+ Output During Parallel Execution: Parallel Output.
+
+ * Modified variable references using pattern substitution come from
+ SunOS 4. *Note Basics of Variable References: Reference. This
+ functionality was provided in GNU 'make' by the 'patsubst' function
+ before the alternate syntax was implemented for compatibility with
+ SunOS 4. It is not altogether clear who inspired whom, since GNU
+ 'make' had 'patsubst' before SunOS 4 was released.
+
+ * The special significance of '+' characters preceding recipe lines
+ (*note Instead of Executing Recipes: Instead of Execution.) is
+ mandated by 'IEEE Standard 1003.2-1992' (POSIX.2).
+
+ * The '+=' syntax to append to the value of a variable comes from
+ SunOS 4 'make'. *Note Appending More Text to Variables: Appending.
+
+ * The syntax 'ARCHIVE(MEM1 MEM2...)' to list multiple members in a
+ single archive file comes from SunOS 4 'make'. *Note Archive
+ Members::.
+
+ * The '-include' directive to include makefiles with no error for a
+ nonexistent file comes from SunOS 4 'make'. (But note that SunOS 4
+ 'make' does not allow multiple makefiles to be specified in one
+ '-include' directive.) The same feature appears with the name
+ 'sinclude' in SGI 'make' and perhaps others.
+
+ * The '!=' shell assignment operator exists in many BSD of 'make' and
+ is purposefully implemented here to behave identically to those
+ implementations.
+
+ * Various build management tools are implemented using scripting
+ languages such as Perl or Python and thus provide a natural
+ embedded scripting language, similar to GNU 'make''s integration of
+ GNU Guile.
+
+ The remaining features are inventions new in GNU 'make':
+
+ * Use the '-v' or '--version' option to print version and copyright
+ information.
+
+ * Use the '-h' or '--help' option to summarize the options to 'make'.
+
+ * Simply-expanded variables. *Note The Two Flavors of Variables:
+ Flavors.
+
+ * Pass command line variable assignments automatically through the
+ variable 'MAKE' to recursive 'make' invocations. *Note Recursive
+ Use of 'make': Recursion.
+
+ * Use the '-C' or '--directory' command option to change directory.
+ *Note Summary of Options: Options Summary.
+
+ * Make verbatim variable definitions with 'define'. *Note Defining
+ Multi-Line Variables: Multi-Line.
+
+ * Declare phony targets with the special target '.PHONY'.
+
+ Andrew Hume of AT&T Bell Labs implemented a similar feature with a
+ different syntax in his 'mk' program. This seems to be a case of
+ parallel discovery. *Note Phony Targets: Phony Targets.
+
+ * Manipulate text by calling functions. *Note Functions for
+ Transforming Text: Functions.
+
+ * Use the '-o' or '--old-file' option to pretend a file's
+ modification-time is old. *Note Avoiding Recompilation of Some
+ Files: Avoiding Compilation.
+
+ * Conditional execution.
+
+ This feature has been implemented numerous times in various
+ versions of 'make'; it seems a natural extension derived from the
+ features of the C preprocessor and similar macro languages and is
+ not a revolutionary concept. *Note Conditional Parts of Makefiles:
+ Conditionals.
+
+ * Specify a search path for included makefiles. *Note Including
+ Other Makefiles: Include.
+
+ * Specify extra makefiles to read with an environment variable.
+ *Note The Variable 'MAKEFILES': MAKEFILES Variable.
+
+ * Strip leading sequences of './' from file names, so that './FILE'
+ and 'FILE' are considered to be the same file.
+
+ * Use a special search method for library prerequisites written in
+ the form '-lNAME'. *Note Directory Search for Link Libraries:
+ Libraries/Search.
+
+ * Allow suffixes for suffix rules (*note Old-Fashioned Suffix Rules:
+ Suffix Rules.) to contain any characters. In other versions of
+ 'make', they must begin with '.' and not contain any '/'
+ characters.
+
+ * Keep track of the current level of 'make' recursion using the
+ variable 'MAKELEVEL'. *Note Recursive Use of 'make': Recursion.
+
+ * Provide any goals given on the command line in the variable
+ 'MAKECMDGOALS'. *Note Arguments to Specify the Goals: Goals.
+
+ * Specify static pattern rules. *Note Static Pattern Rules: Static
+ Pattern.
+
+ * Provide selective 'vpath' search. *Note Searching Directories for
+ Prerequisites: Directory Search.
+
+ * Provide computed variable references. *Note Basics of Variable
+ References: Reference.
+
+ * Update makefiles. *Note How Makefiles Are Remade: Remaking
+ Makefiles. System V 'make' has a very, very limited form of this
+ functionality in that it will check out SCCS files for makefiles.
+
+ * Various new built-in implicit rules. *Note Catalogue of Built-In
+ Rules: Catalogue of Rules.
+
+ * Load dynamic objects which can modify the behavior of 'make'.
+ *Note Loading Dynamic Objects: Loading Objects.
+
+
+File: make.info, Node: Missing, Next: Makefile Conventions, Prev: Features, Up: Top
+
+14 Incompatibilities and Missing Features
+*****************************************
+
+The 'make' programs in various other systems support a few features that
+are not implemented in GNU 'make'. The POSIX.2 standard ('IEEE Standard
+1003.2-1992') which specifies 'make' does not require any of these
+features.
+
+ * A target of the form 'FILE((ENTRY))' stands for a member of archive
+ file FILE. The member is chosen, not by name, but by being an
+ object file which defines the linker symbol ENTRY.
+
+ This feature was not put into GNU 'make' because of the
+ non-modularity of putting knowledge into 'make' of the internal
+ format of archive file symbol tables. *Note Updating Archive
+ Symbol Directories: Archive Symbols.
+
+ * Suffixes (used in suffix rules) that end with the character '~'
+ have a special meaning to System V 'make'; they refer to the SCCS
+ file that corresponds to the file one would get without the '~'.
+ For example, the suffix rule '.c~.o' would make the file 'N.o' from
+ the SCCS file 's.N.c'. For complete coverage, a whole series of
+ such suffix rules is required. *Note Old-Fashioned Suffix Rules:
+ Suffix Rules.
+
+ In GNU 'make', this entire series of cases is handled by two
+ pattern rules for extraction from SCCS, in combination with the
+ general feature of rule chaining. *Note Chains of Implicit Rules:
+ Chained Rules.
+
+ * In System V and 4.3 BSD 'make', files found by 'VPATH' search
+ (*note Searching Directories for Prerequisites: Directory Search.)
+ have their names changed inside recipes. We feel it is much
+ cleaner to always use automatic variables and thus make this
+ feature obsolete.
+
+ * In some Unix 'make's, the automatic variable '$*' appearing in the
+ prerequisites of a rule has the amazingly strange "feature" of
+ expanding to the full name of the _target of that rule_. We cannot
+ imagine what went on in the minds of Unix 'make' developers to do
+ this; it is utterly inconsistent with the normal definition of
+ '$*'.
+
+ * In some Unix 'make's, implicit rule search (*note Using Implicit
+ Rules: Implicit Rules.) is apparently done for _all_ targets, not
+ just those without recipes. This means you can do:
+
+ foo.o:
+ cc -c foo.c
+
+ and Unix 'make' will intuit that 'foo.o' depends on 'foo.c'.
+
+ We feel that such usage is broken. The prerequisite properties of
+ 'make' are well-defined (for GNU 'make', at least), and doing such
+ a thing simply does not fit the model.
+
+ * GNU 'make' does not include any built-in implicit rules for
+ compiling or preprocessing EFL programs. If we hear of anyone who
+ is using EFL, we will gladly add them.
+
+ * It appears that in SVR4 'make', a suffix rule can be specified with
+ no recipe, and it is treated as if it had an empty recipe (*note
+ Empty Recipes::). For example:
+
+ .c.a:
+
+ will override the built-in '.c.a' suffix rule.
+
+ We feel that it is cleaner for a rule without a recipe to always
+ simply add to the prerequisite list for the target. The above
+ example can be easily rewritten to get the desired behavior in GNU
+ 'make':
+
+ .c.a: ;
+
+ * Some versions of 'make' invoke the shell with the '-e' flag, except
+ under '-k' (*note Testing the Compilation of a Program: Testing.).
+ The '-e' flag tells the shell to exit as soon as any program it
+ runs returns a nonzero status. We feel it is cleaner to write each
+ line of the recipe to stand on its own and not require this special
+ treatment.
+
+
+File: make.info, Node: Makefile Conventions, Next: Quick Reference, Prev: Missing, Up: Top
+
+15 Makefile Conventions
+***********************
+
+This node describes conventions for writing the Makefiles for GNU
+programs. Using Automake will help you write a Makefile that follows
+these conventions. For more information on portable Makefiles, see
+POSIX and *note Portable Make Programming: (autoconf)Portable Make.
+
+* Menu:
+
+* Makefile Basics:: General conventions for Makefiles.
+* Utilities in Makefiles:: Utilities to be used in Makefiles.
+* Command Variables:: Variables for specifying commands.
+* DESTDIR:: Supporting staged installs.
+* Directory Variables:: Variables for installation directories.
+* Standard Targets:: Standard targets for users.
+* Install Command Categories:: Three categories of commands in the 'install'
+ rule: normal, pre-install and post-install.
+
+
+File: make.info, Node: Makefile Basics, Next: Utilities in Makefiles, Up: Makefile Conventions
+
+15.1 General Conventions for Makefiles
+======================================
+
+Every Makefile should contain this line:
+
+ SHELL = /bin/sh
+
+to avoid trouble on systems where the 'SHELL' variable might be
+inherited from the environment. (This is never a problem with GNU
+'make'.)
+
+ Different 'make' programs have incompatible suffix lists and implicit
+rules, and this sometimes creates confusion or misbehavior. So it is a
+good idea to set the suffix list explicitly using only the suffixes you
+need in the particular Makefile, like this:
+
+ .SUFFIXES:
+ .SUFFIXES: .c .o
+
+The first line clears out the suffix list, the second introduces all
+suffixes which may be subject to implicit rules in this Makefile.
+
+ Don't assume that '.' is in the path for command execution. When you
+need to run programs that are a part of your package during the make,
+please make sure that it uses './' if the program is built as part of
+the make or '$(srcdir)/' if the file is an unchanging part of the source
+code. Without one of these prefixes, the current search path is used.
+
+ The distinction between './' (the "build directory") and '$(srcdir)/'
+(the "source directory") is important because users can build in a
+separate directory using the '--srcdir' option to 'configure'. A rule
+of the form:
+
+ foo.1 : foo.man sedscript
+ sed -f sedscript foo.man > foo.1
+
+will fail when the build directory is not the source directory, because
+'foo.man' and 'sedscript' are in the source directory.
+
+ When using GNU 'make', relying on 'VPATH' to find the source file
+will work in the case where there is a single dependency file, since the
+'make' automatic variable '$<' will represent the source file wherever
+it is. (Many versions of 'make' set '$<' only in implicit rules.) A
+Makefile target like
+
+ foo.o : bar.c
+ $(CC) -I. -I$(srcdir) $(CFLAGS) -c bar.c -o foo.o
+
+should instead be written as
+
+ foo.o : bar.c
+ $(CC) -I. -I$(srcdir) $(CFLAGS) -c $< -o $@
+
+in order to allow 'VPATH' to work correctly. When the target has
+multiple dependencies, using an explicit '$(srcdir)' is the easiest way
+to make the rule work well. For example, the target above for 'foo.1'
+is best written as:
+
+ foo.1 : foo.man sedscript
+ sed -f $(srcdir)/sedscript $(srcdir)/foo.man > $@
+
+ GNU distributions usually contain some files which are not source
+files--for example, Info files, and the output from Autoconf, Automake,
+Bison or Flex. Since these files normally appear in the source
+directory, they should always appear in the source directory, not in the
+build directory. So Makefile rules to update them should put the
+updated files in the source directory.
+
+ However, if a file does not appear in the distribution, then the
+Makefile should not put it in the source directory, because building a
+program in ordinary circumstances should not modify the source directory
+in any way.
+
+ Try to make the build and installation targets, at least (and all
+their subtargets) work correctly with a parallel 'make'.
+
+
+File: make.info, Node: Utilities in Makefiles, Next: Command Variables, Prev: Makefile Basics, Up: Makefile Conventions
+
+15.2 Utilities in Makefiles
+===========================
+
+Write the Makefile commands (and any shell scripts, such as 'configure')
+to run under 'sh' (both the traditional Bourne shell and the POSIX
+shell), not 'csh'. Don't use any special features of 'ksh' or 'bash',
+or POSIX features not widely supported in traditional Bourne 'sh'.
+
+ The 'configure' script and the Makefile rules for building and
+installation should not use any utilities directly except these:
+
+ awk cat cmp cp diff echo egrep expr false grep install-info ln ls
+ mkdir mv printf pwd rm rmdir sed sleep sort tar test touch tr true
+
+ Compression programs such as 'gzip' can be used in the 'dist' rule.
+
+ Generally, stick to the widely-supported (usually POSIX-specified)
+options and features of these programs. For example, don't use 'mkdir
+-p', convenient as it may be, because a few systems don't support it at
+all and with others, it is not safe for parallel execution. For a list
+of known incompatibilities, see *note Portable Shell Programming:
+(autoconf)Portable Shell.
+
+ It is a good idea to avoid creating symbolic links in makefiles,
+since a few file systems don't support them.
+
+ The Makefile rules for building and installation can also use
+compilers and related programs, but should do so via 'make' variables so
+that the user can substitute alternatives. Here are some of the
+programs we mean:
+
+ ar bison cc flex install ld ldconfig lex
+ make makeinfo ranlib texi2dvi yacc
+
+ Use the following 'make' variables to run those programs:
+
+ $(AR) $(BISON) $(CC) $(FLEX) $(INSTALL) $(LD) $(LDCONFIG) $(LEX)
+ $(MAKE) $(MAKEINFO) $(RANLIB) $(TEXI2DVI) $(YACC)
+
+ When you use 'ranlib' or 'ldconfig', you should make sure nothing bad
+happens if the system does not have the program in question. Arrange to
+ignore an error from that command, and print a message before the
+command to tell the user that failure of this command does not mean a
+problem. (The Autoconf 'AC_PROG_RANLIB' macro can help with this.)
+
+ If you use symbolic links, you should implement a fallback for
+systems that don't have symbolic links.
+
+ Additional utilities that can be used via Make variables are:
+
+ chgrp chmod chown mknod
+
+ It is ok to use other utilities in Makefile portions (or scripts)
+intended only for particular systems where you know those utilities
+exist.
+
+
+File: make.info, Node: Command Variables, Next: DESTDIR, Prev: Utilities in Makefiles, Up: Makefile Conventions
+
+15.3 Variables for Specifying Commands
+======================================
+
+Makefiles should provide variables for overriding certain commands,
+options, and so on.
+
+ In particular, you should run most utility programs via variables.
+Thus, if you use Bison, have a variable named 'BISON' whose default
+value is set with 'BISON = bison', and refer to it with '$(BISON)'
+whenever you need to use Bison.
+
+ File management utilities such as 'ln', 'rm', 'mv', and so on, need
+not be referred to through variables in this way, since users don't need
+to replace them with other programs.
+
+ Each program-name variable should come with an options variable that
+is used to supply options to the program. Append 'FLAGS' to the
+program-name variable name to get the options variable name--for
+example, 'BISONFLAGS'. (The names 'CFLAGS' for the C compiler, 'YFLAGS'
+for yacc, and 'LFLAGS' for lex, are exceptions to this rule, but we keep
+them because they are standard.) Use 'CPPFLAGS' in any compilation
+command that runs the preprocessor, and use 'LDFLAGS' in any compilation
+command that does linking as well as in any direct use of 'ld'.
+
+ If there are C compiler options that _must_ be used for proper
+compilation of certain files, do not include them in 'CFLAGS'. Users
+expect to be able to specify 'CFLAGS' freely themselves. Instead,
+arrange to pass the necessary options to the C compiler independently of
+'CFLAGS', by writing them explicitly in the compilation commands or by
+defining an implicit rule, like this:
+
+ CFLAGS = -g
+ ALL_CFLAGS = -I. $(CFLAGS)
+ .c.o:
+ $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
+
+ Do include the '-g' option in 'CFLAGS', because that is not
+_required_ for proper compilation. You can consider it a default that
+is only recommended. If the package is set up so that it is compiled
+with GCC by default, then you might as well include '-O' in the default
+value of 'CFLAGS' as well.
+
+ Put 'CFLAGS' last in the compilation command, after other variables
+containing compiler options, so the user can use 'CFLAGS' to override
+the others.
+
+ 'CFLAGS' should be used in every invocation of the C compiler, both
+those which do compilation and those which do linking.
+
+ Every Makefile should define the variable 'INSTALL', which is the
+basic command for installing a file into the system.
+
+ Every Makefile should also define the variables 'INSTALL_PROGRAM' and
+'INSTALL_DATA'. (The default for 'INSTALL_PROGRAM' should be
+'$(INSTALL)'; the default for 'INSTALL_DATA' should be '${INSTALL} -m
+644'.) Then it should use those variables as the commands for actual
+installation, for executables and non-executables respectively. Minimal
+use of these variables is as follows:
+
+ $(INSTALL_PROGRAM) foo $(bindir)/foo
+ $(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a
+
+ However, it is preferable to support a 'DESTDIR' prefix on the target
+files, as explained in the next section.
+
+ It is acceptable, but not required, to install multiple files in one
+command, with the final argument being a directory, as in:
+
+ $(INSTALL_PROGRAM) foo bar baz $(bindir)
+
+
+File: make.info, Node: DESTDIR, Next: Directory Variables, Prev: Command Variables, Up: Makefile Conventions
+
+15.4 'DESTDIR': Support for Staged Installs
+===========================================
+
+'DESTDIR' is a variable prepended to each installed target file, like
+this:
+
+ $(INSTALL_PROGRAM) foo $(DESTDIR)$(bindir)/foo
+ $(INSTALL_DATA) libfoo.a $(DESTDIR)$(libdir)/libfoo.a
+
+ The 'DESTDIR' variable is specified by the user on the 'make' command
+line as an absolute file name. For example:
+
+ make DESTDIR=/tmp/stage install
+
+'DESTDIR' should be supported only in the 'install*' and 'uninstall*'
+targets, as those are the only targets where it is useful.
+
+ If your installation step would normally install '/usr/local/bin/foo'
+and '/usr/local/lib/libfoo.a', then an installation invoked as in the
+example above would install '/tmp/stage/usr/local/bin/foo' and
+'/tmp/stage/usr/local/lib/libfoo.a' instead.
+
+ Prepending the variable 'DESTDIR' to each target in this way provides
+for "staged installs", where the installed files are not placed directly
+into their expected location but are instead copied into a temporary
+location ('DESTDIR'). However, installed files maintain their relative
+directory structure and any embedded file names will not be modified.
+
+ You should not set the value of 'DESTDIR' in your 'Makefile' at all;
+then the files are installed into their expected locations by default.
+Also, specifying 'DESTDIR' should not change the operation of the
+software in any way, so its value should not be included in any file
+contents.
+
+ 'DESTDIR' support is commonly used in package creation. It is also
+helpful to users who want to understand what a given package will
+install where, and to allow users who don't normally have permissions to
+install into protected areas to build and install before gaining those
+permissions. Finally, it can be useful with tools such as 'stow', where
+code is installed in one place but made to appear to be installed
+somewhere else using symbolic links or special mount operations. So, we
+strongly recommend GNU packages support 'DESTDIR', though it is not an
+absolute requirement.
+
+
+File: make.info, Node: Directory Variables, Next: Standard Targets, Prev: DESTDIR, Up: Makefile Conventions
+
+15.5 Variables for Installation Directories
+===========================================
+
+Installation directories should always be named by variables, so it is
+easy to install in a nonstandard place. The standard names for these
+variables and the values they should have in GNU packages are described
+below. They are based on a standard file system layout; variants of it
+are used in GNU/Linux and other modern operating systems.
+
+ Installers are expected to override these values when calling 'make'
+(e.g., 'make prefix=/usr install' or 'configure' (e.g., 'configure
+--prefix=/usr'). GNU packages should not try to guess which value
+should be appropriate for these variables on the system they are being
+installed onto: use the default settings specified here so that all GNU
+packages behave identically, allowing the installer to achieve any
+desired layout.
+
+ All installation directories, and their parent directories, should be
+created (if necessary) before they are installed into.
+
+ These first two variables set the root for the installation. All the
+other installation directories should be subdirectories of one of these
+two, and nothing should be directly installed into these two
+directories.
+
+'prefix'
+ A prefix used in constructing the default values of the variables
+ listed below. The default value of 'prefix' should be
+ '/usr/local'. When building the complete GNU system, the prefix
+ will be empty and '/usr' will be a symbolic link to '/'. (If you
+ are using Autoconf, write it as '@prefix@'.)
+
+ Running 'make install' with a different value of 'prefix' from the
+ one used to build the program should _not_ recompile the program.
+
+'exec_prefix'
+ A prefix used in constructing the default values of some of the
+ variables listed below. The default value of 'exec_prefix' should
+ be '$(prefix)'. (If you are using Autoconf, write it as
+ '@exec_prefix@'.)
+
+ Generally, '$(exec_prefix)' is used for directories that contain
+ machine-specific files (such as executables and subroutine
+ libraries), while '$(prefix)' is used directly for other
+ directories.
+
+ Running 'make install' with a different value of 'exec_prefix' from
+ the one used to build the program should _not_ recompile the
+ program.
+
+ Executable programs are installed in one of the following
+directories.
+
+'bindir'
+ The directory for installing executable programs that users can
+ run. This should normally be '/usr/local/bin', but write it as
+ '$(exec_prefix)/bin'. (If you are using Autoconf, write it as
+ '@bindir@'.)
+
+'sbindir'
+ The directory for installing executable programs that can be run
+ from the shell, but are only generally useful to system
+ administrators. This should normally be '/usr/local/sbin', but
+ write it as '$(exec_prefix)/sbin'. (If you are using Autoconf,
+ write it as '@sbindir@'.)
+
+'libexecdir'
+ The directory for installing executable programs to be run by other
+ programs rather than by users. This directory should normally be
+ '/usr/local/libexec', but write it as '$(exec_prefix)/libexec'.
+ (If you are using Autoconf, write it as '@libexecdir@'.)
+
+ The definition of 'libexecdir' is the same for all packages, so you
+ should install your data in a subdirectory thereof. Most packages
+ install their data under '$(libexecdir)/PACKAGE-NAME/', possibly
+ within additional subdirectories thereof, such as
+ '$(libexecdir)/PACKAGE-NAME/MACHINE/VERSION'.
+
+ Data files used by the program during its execution are divided into
+categories in two ways.
+
+ * Some files are normally modified by programs; others are never
+ normally modified (though users may edit some of these).
+
+ * Some files are architecture-independent and can be shared by all
+ machines at a site; some are architecture-dependent and can be
+ shared only by machines of the same kind and operating system;
+ others may never be shared between two machines.
+
+ This makes for six different possibilities. However, we want to
+discourage the use of architecture-dependent files, aside from object
+files and libraries. It is much cleaner to make other data files
+architecture-independent, and it is generally not hard.
+
+ Here are the variables Makefiles should use to specify directories to
+put these various kinds of files in:
+
+'datarootdir'
+ The root of the directory tree for read-only
+ architecture-independent data files. This should normally be
+ '/usr/local/share', but write it as '$(prefix)/share'. (If you are
+ using Autoconf, write it as '@datarootdir@'.) 'datadir''s default
+ value is based on this variable; so are 'infodir', 'mandir', and
+ others.
+
+'datadir'
+ The directory for installing idiosyncratic read-only
+ architecture-independent data files for this program. This is
+ usually the same place as 'datarootdir', but we use the two
+ separate variables so that you can move these program-specific
+ files without altering the location for Info files, man pages, etc.
+
+ This should normally be '/usr/local/share', but write it as
+ '$(datarootdir)'. (If you are using Autoconf, write it as
+ '@datadir@'.)
+
+ The definition of 'datadir' is the same for all packages, so you
+ should install your data in a subdirectory thereof. Most packages
+ install their data under '$(datadir)/PACKAGE-NAME/'.
+
+'sysconfdir'
+ The directory for installing read-only data files that pertain to a
+ single machine-that is to say, files for configuring a host.
+ Mailer and network configuration files, '/etc/passwd', and so forth
+ belong here. All the files in this directory should be ordinary
+ ASCII text files. This directory should normally be
+ '/usr/local/etc', but write it as '$(prefix)/etc'. (If you are
+ using Autoconf, write it as '@sysconfdir@'.)
+
+ Do not install executables here in this directory (they probably
+ belong in '$(libexecdir)' or '$(sbindir)'). Also do not install
+ files that are modified in the normal course of their use (programs
+ whose purpose is to change the configuration of the system
+ excluded). Those probably belong in '$(localstatedir)'.
+
+'sharedstatedir'
+ The directory for installing architecture-independent data files
+ which the programs modify while they run. This should normally be
+ '/usr/local/com', but write it as '$(prefix)/com'. (If you are
+ using Autoconf, write it as '@sharedstatedir@'.)
+
+'localstatedir'
+ The directory for installing data files which the programs modify
+ while they run, and that pertain to one specific machine. Users
+ should never need to modify files in this directory to configure
+ the package's operation; put such configuration information in
+ separate files that go in '$(datadir)' or '$(sysconfdir)'.
+ '$(localstatedir)' should normally be '/usr/local/var', but write
+ it as '$(prefix)/var'. (If you are using Autoconf, write it as
+ '@localstatedir@'.)
+
+'runstatedir'
+ The directory for installing data files which the programs modify
+ while they run, that pertain to one specific machine, and which
+ need not persist longer than the execution of the program--which is
+ generally long-lived, for example, until the next reboot. PID
+ files for system daemons are a typical use. In addition, this
+ directory should not be cleaned except perhaps at reboot, while the
+ general '/tmp' ('TMPDIR') may be cleaned arbitrarily. This should
+ normally be '/var/run', but write it as '$(localstatedir)/run'.
+ Having it as a separate variable allows the use of '/run' if
+ desired, for example. (If you are using Autoconf 2.70 or later,
+ write it as '@runstatedir@'.)
+
+ These variables specify the directory for installing certain specific
+types of files, if your program has them. Every GNU package should have
+Info files, so every program needs 'infodir', but not all need 'libdir'
+or 'lispdir'.
+
+'includedir'
+ The directory for installing header files to be included by user
+ programs with the C '#include' preprocessor directive. This should
+ normally be '/usr/local/include', but write it as
+ '$(prefix)/include'. (If you are using Autoconf, write it as
+ '@includedir@'.)
+
+ Most compilers other than GCC do not look for header files in
+ directory '/usr/local/include'. So installing the header files
+ this way is only useful with GCC. Sometimes this is not a problem
+ because some libraries are only really intended to work with GCC.
+ But some libraries are intended to work with other compilers. They
+ should install their header files in two places, one specified by
+ 'includedir' and one specified by 'oldincludedir'.
+
+'oldincludedir'
+ The directory for installing '#include' header files for use with
+ compilers other than GCC. This should normally be '/usr/include'.
+ (If you are using Autoconf, you can write it as '@oldincludedir@'.)
+
+ The Makefile commands should check whether the value of
+ 'oldincludedir' is empty. If it is, they should not try to use it;
+ they should cancel the second installation of the header files.
+
+ A package should not replace an existing header in this directory
+ unless the header came from the same package. Thus, if your Foo
+ package provides a header file 'foo.h', then it should install the
+ header file in the 'oldincludedir' directory if either (1) there is
+ no 'foo.h' there or (2) the 'foo.h' that exists came from the Foo
+ package.
+
+ To tell whether 'foo.h' came from the Foo package, put a magic
+ string in the file--part of a comment--and 'grep' for that string.
+
+'docdir'
+ The directory for installing documentation files (other than Info)
+ for this package. By default, it should be
+ '/usr/local/share/doc/YOURPKG', but it should be written as
+ '$(datarootdir)/doc/YOURPKG'. (If you are using Autoconf, write it
+ as '@docdir@'.) The YOURPKG subdirectory, which may include a
+ version number, prevents collisions among files with common names,
+ such as 'README'.
+
+'infodir'
+ The directory for installing the Info files for this package. By
+ default, it should be '/usr/local/share/info', but it should be
+ written as '$(datarootdir)/info'. (If you are using Autoconf,
+ write it as '@infodir@'.) 'infodir' is separate from 'docdir' for
+ compatibility with existing practice.
+
+'htmldir'
+'dvidir'
+'pdfdir'
+'psdir'
+ Directories for installing documentation files in the particular
+ format. They should all be set to '$(docdir)' by default. (If you
+ are using Autoconf, write them as '@htmldir@', '@dvidir@', etc.)
+ Packages which supply several translations of their documentation
+ should install them in '$(htmldir)/'LL, '$(pdfdir)/'LL, etc. where
+ LL is a locale abbreviation such as 'en' or 'pt_BR'.
+
+'libdir'
+ The directory for object files and libraries of object code. Do
+ not install executables here, they probably ought to go in
+ '$(libexecdir)' instead. The value of 'libdir' should normally be
+ '/usr/local/lib', but write it as '$(exec_prefix)/lib'. (If you
+ are using Autoconf, write it as '@libdir@'.)
+
+'lispdir'
+ The directory for installing any Emacs Lisp files in this package.
+ By default, it should be '/usr/local/share/emacs/site-lisp', but it
+ should be written as '$(datarootdir)/emacs/site-lisp'.
+
+ If you are using Autoconf, write the default as '@lispdir@'. In
+ order to make '@lispdir@' work, you need the following lines in
+ your 'configure.ac' file:
+
+ lispdir='${datarootdir}/emacs/site-lisp'
+ AC_SUBST(lispdir)
+
+'localedir'
+ The directory for installing locale-specific message catalogs for
+ this package. By default, it should be '/usr/local/share/locale',
+ but it should be written as '$(datarootdir)/locale'. (If you are
+ using Autoconf, write it as '@localedir@'.) This directory usually
+ has a subdirectory per locale.
+
+ Unix-style man pages are installed in one of the following:
+
+'mandir'
+ The top-level directory for installing the man pages (if any) for
+ this package. It will normally be '/usr/local/share/man', but you
+ should write it as '$(datarootdir)/man'. (If you are using
+ Autoconf, write it as '@mandir@'.)
+
+'man1dir'
+ The directory for installing section 1 man pages. Write it as
+ '$(mandir)/man1'.
+'man2dir'
+ The directory for installing section 2 man pages. Write it as
+ '$(mandir)/man2'
+'...'
+
+ *Don't make the primary documentation for any GNU software be a man
+ page. Write a manual in Texinfo instead. Man pages are just for
+ the sake of people running GNU software on Unix, which is a
+ secondary application only.*
+
+'manext'
+ The file name extension for the installed man page. This should
+ contain a period followed by the appropriate digit; it should
+ normally be '.1'.
+
+'man1ext'
+ The file name extension for installed section 1 man pages.
+'man2ext'
+ The file name extension for installed section 2 man pages.
+'...'
+ Use these names instead of 'manext' if the package needs to install
+ man pages in more than one section of the manual.
+
+ And finally, you should set the following variable:
+
+'srcdir'
+ The directory for the sources being compiled. The value of this
+ variable is normally inserted by the 'configure' shell script. (If
+ you are using Autoconf, use 'srcdir = @srcdir@'.)
+
+ For example:
+
+ # Common prefix for installation directories.
+ # NOTE: This directory must exist when you start the install.
+ prefix = /usr/local
+ datarootdir = $(prefix)/share
+ datadir = $(datarootdir)
+ exec_prefix = $(prefix)
+ # Where to put the executable for the command `gcc'.
+ bindir = $(exec_prefix)/bin
+ # Where to put the directories used by the compiler.
+ libexecdir = $(exec_prefix)/libexec
+ # Where to put the Info files.
+ infodir = $(datarootdir)/info
+
+ If your program installs a large number of files into one of the
+standard user-specified directories, it might be useful to group them
+into a subdirectory particular to that program. If you do this, you
+should write the 'install' rule to create these subdirectories.
+
+ Do not expect the user to include the subdirectory name in the value
+of any of the variables listed above. The idea of having a uniform set
+of variable names for installation directories is to enable the user to
+specify the exact same values for several different GNU packages. In
+order for this to be useful, all the packages must be designed so that
+they will work sensibly when the user does so.
+
+ At times, not all of these variables may be implemented in the
+current release of Autoconf and/or Automake; but as of Autoconf 2.60, we
+believe all of them are. When any are missing, the descriptions here
+serve as specifications for what Autoconf will implement. As a
+programmer, you can either use a development version of Autoconf or
+avoid using these variables until a stable release is made which
+supports them.
+
+
+File: make.info, Node: Standard Targets, Next: Install Command Categories, Prev: Directory Variables, Up: Makefile Conventions
+
+15.6 Standard Targets for Users
+===============================
+
+All GNU programs should have the following targets in their Makefiles:
+
+'all'
+ Compile the entire program. This should be the default target.
+ This target need not rebuild any documentation files; Info files
+ should normally be included in the distribution, and DVI (and other
+ documentation format) files should be made only when explicitly
+ asked for.
+
+ By default, the Make rules should compile and link with '-g', so
+ that executable programs have debugging symbols. Otherwise, you
+ are essentially helpless in the face of a crash, and it is often
+ far from easy to reproduce with a fresh build.
+
+'install'
+ Compile the program and copy the executables, libraries, and so on
+ to the file names where they should reside for actual use. If
+ there is a simple test to verify that a program is properly
+ installed, this target should run that test.
+
+ Do not strip executables when installing them. This helps eventual
+ debugging that may be needed later, and nowadays disk space is
+ cheap and dynamic loaders typically ensure debug sections are not
+ loaded during normal execution. Users that need stripped binaries
+ may invoke the 'install-strip' target to do that.
+
+ If possible, write the 'install' target rule so that it does not
+ modify anything in the directory where the program was built,
+ provided 'make all' has just been done. This is convenient for
+ building the program under one user name and installing it under
+ another.
+
+ The commands should create all the directories in which files are
+ to be installed, if they don't already exist. This includes the
+ directories specified as the values of the variables 'prefix' and
+ 'exec_prefix', as well as all subdirectories that are needed. One
+ way to do this is by means of an 'installdirs' target as described
+ below.
+
+ Use '-' before any command for installing a man page, so that
+ 'make' will ignore any errors. This is in case there are systems
+ that don't have the Unix man page documentation system installed.
+
+ The way to install Info files is to copy them into '$(infodir)'
+ with '$(INSTALL_DATA)' (*note Command Variables::), and then run
+ the 'install-info' program if it is present. 'install-info' is a
+ program that edits the Info 'dir' file to add or update the menu
+ entry for the given Info file; it is part of the Texinfo package.
+
+ Here is a sample rule to install an Info file that also tries to
+ handle some additional situations, such as 'install-info' not being
+ present.
+
+ do-install-info: foo.info installdirs
+ $(NORMAL_INSTALL)
+ # Prefer an info file in . to one in srcdir.
+ if test -f foo.info; then d=.; \
+ else d="$(srcdir)"; fi; \
+ $(INSTALL_DATA) $$d/foo.info \
+ "$(DESTDIR)$(infodir)/foo.info"
+ # Run install-info only if it exists.
+ # Use `if' instead of just prepending `-' to the
+ # line so we notice real errors from install-info.
+ # Use `$(SHELL) -c' because some shells do not
+ # fail gracefully when there is an unknown command.
+ $(POST_INSTALL)
+ if $(SHELL) -c 'install-info --version' \
+ >/dev/null 2>&1; then \
+ install-info --dir-file="$(DESTDIR)$(infodir)/dir" \
+ "$(DESTDIR)$(infodir)/foo.info"; \
+ else true; fi
+
+ When writing the 'install' target, you must classify all the
+ commands into three categories: normal ones, "pre-installation"
+ commands and "post-installation" commands. *Note Install Command
+ Categories::.
+
+'install-html'
+'install-dvi'
+'install-pdf'
+'install-ps'
+ These targets install documentation in formats other than Info;
+ they're intended to be called explicitly by the person installing
+ the package, if that format is desired. GNU prefers Info files, so
+ these must be installed by the 'install' target.
+
+ When you have many documentation files to install, we recommend
+ that you avoid collisions and clutter by arranging for these
+ targets to install in subdirectories of the appropriate
+ installation directory, such as 'htmldir'. As one example, if your
+ package has multiple manuals, and you wish to install HTML
+ documentation with many files (such as the "split" mode output by
+ 'makeinfo --html'), you'll certainly want to use subdirectories, or
+ two nodes with the same name in different manuals will overwrite
+ each other.
+
+ Please make these 'install-FORMAT' targets invoke the commands for
+ the FORMAT target, for example, by making FORMAT a dependency.
+
+'uninstall'
+ Delete all the installed files--the copies that the 'install' and
+ 'install-*' targets create.
+
+ This rule should not modify the directories where compilation is
+ done, only the directories where files are installed.
+
+ The uninstallation commands are divided into three categories, just
+ like the installation commands. *Note Install Command
+ Categories::.
+
+'install-strip'
+ Like 'install', but strip the executable files while installing
+ them. In simple cases, this target can use the 'install' target in
+ a simple way:
+
+ install-strip:
+ $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \
+ install
+
+ But if the package installs scripts as well as real executables,
+ the 'install-strip' target can't just refer to the 'install'
+ target; it has to strip the executables but not the scripts.
+
+ 'install-strip' should not strip the executables in the build
+ directory which are being copied for installation. It should only
+ strip the copies that are installed.
+
+ Normally we do not recommend stripping an executable unless you are
+ sure the program has no bugs. However, it can be reasonable to
+ install a stripped executable for actual execution while saving the
+ unstripped executable elsewhere in case there is a bug.
+
+'clean'
+ Delete all files in the current directory that are normally created
+ by building the program. Also delete files in other directories if
+ they are created by this makefile. However, don't delete the files
+ that record the configuration. Also preserve files that could be
+ made by building, but normally aren't because the distribution
+ comes with them. There is no need to delete parent directories
+ that were created with 'mkdir -p', since they could have existed
+ anyway.
+
+ Delete '.dvi' files here if they are not part of the distribution.
+
+'distclean'
+ Delete all files in the current directory (or created by this
+ makefile) that are created by configuring or building the program.
+ If you have unpacked the source and built the program without
+ creating any other files, 'make distclean' should leave only the
+ files that were in the distribution. However, there is no need to
+ delete parent directories that were created with 'mkdir -p', since
+ they could have existed anyway.
+
+'mostlyclean'
+ Like 'clean', but may refrain from deleting a few files that people
+ normally don't want to recompile. For example, the 'mostlyclean'
+ target for GCC does not delete 'libgcc.a', because recompiling it
+ is rarely necessary and takes a lot of time.
+
+'maintainer-clean'
+ Delete almost everything that can be reconstructed with this
+ Makefile. This typically includes everything deleted by
+ 'distclean', plus more: C source files produced by Bison, tags
+ tables, Info files, and so on.
+
+ The reason we say "almost everything" is that running the command
+ 'make maintainer-clean' should not delete 'configure' even if
+ 'configure' can be remade using a rule in the Makefile. More
+ generally, 'make maintainer-clean' should not delete anything that
+ needs to exist in order to run 'configure' and then begin to build
+ the program. Also, there is no need to delete parent directories
+ that were created with 'mkdir -p', since they could have existed
+ anyway. These are the only exceptions; 'maintainer-clean' should
+ delete everything else that can be rebuilt.
+
+ The 'maintainer-clean' target is intended to be used by a
+ maintainer of the package, not by ordinary users. You may need
+ special tools to reconstruct some of the files that 'make
+ maintainer-clean' deletes. Since these files are normally included
+ in the distribution, we don't take care to make them easy to
+ reconstruct. If you find you need to unpack the full distribution
+ again, don't blame us.
+
+ To help make users aware of this, the commands for the special
+ 'maintainer-clean' target should start with these two:
+
+ @echo 'This command is intended for maintainers to use; it'
+ @echo 'deletes files that may need special tools to rebuild.'
+
+'TAGS'
+ Update a tags table for this program.
+
+'info'
+ Generate any Info files needed. The best way to write the rules is
+ as follows:
+
+ info: foo.info
+
+ foo.info: foo.texi chap1.texi chap2.texi
+ $(MAKEINFO) $(srcdir)/foo.texi
+
+ You must define the variable 'MAKEINFO' in the Makefile. It should
+ run the 'makeinfo' program, which is part of the Texinfo
+ distribution.
+
+ Normally a GNU distribution comes with Info files, and that means
+ the Info files are present in the source directory. Therefore, the
+ Make rule for an info file should update it in the source
+ directory. When users build the package, ordinarily Make will not
+ update the Info files because they will already be up to date.
+
+'dvi'
+'html'
+'pdf'
+'ps'
+ Generate documentation files in the given format. These targets
+ should always exist, but any or all can be a no-op if the given
+ output format cannot be generated. These targets should not be
+ dependencies of the 'all' target; the user must manually invoke
+ them.
+
+ Here's an example rule for generating DVI files from Texinfo:
+
+ dvi: foo.dvi
+
+ foo.dvi: foo.texi chap1.texi chap2.texi
+ $(TEXI2DVI) $(srcdir)/foo.texi
+
+ You must define the variable 'TEXI2DVI' in the Makefile. It should
+ run the program 'texi2dvi', which is part of the Texinfo
+ distribution. ('texi2dvi' uses TeX to do the real work of
+ formatting. TeX is not distributed with Texinfo.) Alternatively,
+ write only the dependencies, and allow GNU 'make' to provide the
+ command.
+
+ Here's another example, this one for generating HTML from Texinfo:
+
+ html: foo.html
+
+ foo.html: foo.texi chap1.texi chap2.texi
+ $(TEXI2HTML) $(srcdir)/foo.texi
+
+ Again, you would define the variable 'TEXI2HTML' in the Makefile;
+ for example, it might run 'makeinfo --no-split --html' ('makeinfo'
+ is part of the Texinfo distribution).
+
+'dist'
+ Create a distribution tar file for this program. The tar file
+ should be set up so that the file names in the tar file start with
+ a subdirectory name which is the name of the package it is a
+ distribution for. This name can include the version number.
+
+ For example, the distribution tar file of GCC version 1.40 unpacks
+ into a subdirectory named 'gcc-1.40'.
+
+ The easiest way to do this is to create a subdirectory
+ appropriately named, use 'ln' or 'cp' to install the proper files
+ in it, and then 'tar' that subdirectory.
+
+ Compress the tar file with 'gzip'. For example, the actual
+ distribution file for GCC version 1.40 is called 'gcc-1.40.tar.gz'.
+ It is ok to support other free compression formats as well.
+
+ The 'dist' target should explicitly depend on all non-source files
+ that are in the distribution, to make sure they are up to date in
+ the distribution. *Note Making Releases: (standards)Releases.
+
+'check'
+ Perform self-tests (if any). The user must build the program
+ before running the tests, but need not install the program; you
+ should write the self-tests so that they work when the program is
+ built but not installed.
+
+ The following targets are suggested as conventional names, for
+programs in which they are useful.
+
+'installcheck'
+ Perform installation tests (if any). The user must build and
+ install the program before running the tests. You should not
+ assume that '$(bindir)' is in the search path.
+
+'installdirs'
+ It's useful to add a target named 'installdirs' to create the
+ directories where files are installed, and their parent
+ directories. There is a script called 'mkinstalldirs' which is
+ convenient for this; you can find it in the Gnulib package. You
+ can use a rule like this:
+
+ # Make sure all installation directories (e.g. $(bindir))
+ # actually exist by making them if necessary.
+ installdirs: mkinstalldirs
+ $(srcdir)/mkinstalldirs $(bindir) $(datadir) \
+ $(libdir) $(infodir) \
+ $(mandir)
+
+ or, if you wish to support 'DESTDIR' (strongly encouraged),
+
+ # Make sure all installation directories (e.g. $(bindir))
+ # actually exist by making them if necessary.
+ installdirs: mkinstalldirs
+ $(srcdir)/mkinstalldirs \
+ $(DESTDIR)$(bindir) $(DESTDIR)$(datadir) \
+ $(DESTDIR)$(libdir) $(DESTDIR)$(infodir) \
+ $(DESTDIR)$(mandir)
+
+ This rule should not modify the directories where compilation is
+ done. It should do nothing but create installation directories.
+
+
+File: make.info, Node: Install Command Categories, Prev: Standard Targets, Up: Makefile Conventions
+
+15.7 Install Command Categories
+===============================
+
+When writing the 'install' target, you must classify all the commands
+into three categories: normal ones, "pre-installation" commands and
+"post-installation" commands.
+
+ Normal commands move files into their proper places, and set their
+modes. They may not alter any files except the ones that come entirely
+from the package they belong to.
+
+ Pre-installation and post-installation commands may alter other
+files; in particular, they can edit global configuration files or data
+bases.
+
+ Pre-installation commands are typically executed before the normal
+commands, and post-installation commands are typically run after the
+normal commands.
+
+ The most common use for a post-installation command is to run
+'install-info'. This cannot be done with a normal command, since it
+alters a file (the Info directory) which does not come entirely and
+solely from the package being installed. It is a post-installation
+command because it needs to be done after the normal command which
+installs the package's Info files.
+
+ Most programs don't need any pre-installation commands, but we have
+the feature just in case it is needed.
+
+ To classify the commands in the 'install' rule into these three
+categories, insert "category lines" among them. A category line
+specifies the category for the commands that follow.
+
+ A category line consists of a tab and a reference to a special Make
+variable, plus an optional comment at the end. There are three
+variables you can use, one for each category; the variable name
+specifies the category. Category lines are no-ops in ordinary execution
+because these three Make variables are normally undefined (and you
+_should not_ define them in the makefile).
+
+ Here are the three possible category lines, each with a comment that
+explains what it means:
+
+ $(PRE_INSTALL) # Pre-install commands follow.
+ $(POST_INSTALL) # Post-install commands follow.
+ $(NORMAL_INSTALL) # Normal commands follow.
+
+ If you don't use a category line at the beginning of the 'install'
+rule, all the commands are classified as normal until the first category
+line. If you don't use any category lines, all the commands are
+classified as normal.
+
+ These are the category lines for 'uninstall':
+
+ $(PRE_UNINSTALL) # Pre-uninstall commands follow.
+ $(POST_UNINSTALL) # Post-uninstall commands follow.
+ $(NORMAL_UNINSTALL) # Normal commands follow.
+
+ Typically, a pre-uninstall command would be used for deleting entries
+from the Info directory.
+
+ If the 'install' or 'uninstall' target has any dependencies which act
+as subroutines of installation, then you should start _each_
+dependency's commands with a category line, and start the main target's
+commands with a category line also. This way, you can ensure that each
+command is placed in the right category regardless of which of the
+dependencies actually run.
+
+ Pre-installation and post-installation commands should not run any
+programs except for these:
+
+ [ basename bash cat chgrp chmod chown cmp cp dd diff echo
+ egrep expand expr false fgrep find getopt grep gunzip gzip
+ hostname install install-info kill ldconfig ln ls md5sum
+ mkdir mkfifo mknod mv printenv pwd rm rmdir sed sort tee
+ test touch true uname xargs yes
+
+ The reason for distinguishing the commands in this way is for the
+sake of making binary packages. Typically a binary package contains all
+the executables and other files that need to be installed, and has its
+own method of installing them--so it does not need to run the normal
+installation commands. But installing the binary package does need to
+execute the pre-installation and post-installation commands.
+
+ Programs to build binary packages work by extracting the
+pre-installation and post-installation commands. Here is one way of
+extracting the pre-installation commands (the '-s' option to 'make' is
+needed to silence messages about entering subdirectories):
+
+ make -s -n install -o all \
+ PRE_INSTALL=pre-install \
+ POST_INSTALL=post-install \
+ NORMAL_INSTALL=normal-install \
+ | gawk -f pre-install.awk
+
+where the file 'pre-install.awk' could contain this:
+
+ $0 ~ /^(normal-install|post-install)[ \t]*$/ {on = 0}
+ on {print $0}
+ $0 ~ /^pre-install[ \t]*$/ {on = 1}
+
+
+File: make.info, Node: Quick Reference, Next: Error Messages, Prev: Makefile Conventions, Up: Top
+
+Appendix A Quick Reference
+**************************
+
+This appendix summarizes the directives, text manipulation functions,
+and special variables which GNU 'make' understands. *Note Special
+Targets::, *note Catalogue of Built-In Rules: Catalogue of Rules, and
+*note Summary of Options: Options Summary, for other summaries.
+
+ Here is a summary of the directives GNU 'make' recognizes:
+
+'define VARIABLE'
+'define VARIABLE ='
+'define VARIABLE :='
+'define VARIABLE ::='
+'define VARIABLE +='
+'define VARIABLE ?='
+'endef'
+ Define multi-line variables.
+ *Note Multi-Line::.
+
+'undefine VARIABLE'
+ Undefining variables.
+ *Note Undefine Directive::.
+
+'ifdef VARIABLE'
+'ifndef VARIABLE'
+'ifeq (A,B)'
+'ifeq "A" "B"'
+'ifeq 'A' 'B''
+'ifneq (A,B)'
+'ifneq "A" "B"'
+'ifneq 'A' 'B''
+'else'
+'endif'
+ Conditionally evaluate part of the makefile.
+ *Note Conditionals::.
+
+'include FILE'
+'-include FILE'
+'sinclude FILE'
+ Include another makefile.
+ *Note Including Other Makefiles: Include.
+
+'override VARIABLE-ASSIGNMENT'
+ Define a variable, overriding any previous definition, even one
+ from the command line.
+ *Note The 'override' Directive: Override Directive.
+
+'export'
+ Tell 'make' to export all variables to child processes by default.
+ *Note Communicating Variables to a Sub-'make': Variables/Recursion.
+
+'export VARIABLE'
+'export VARIABLE-ASSIGNMENT'
+'unexport VARIABLE'
+ Tell 'make' whether or not to export a particular variable to child
+ processes.
+ *Note Communicating Variables to a Sub-'make': Variables/Recursion.
+
+'private VARIABLE-ASSIGNMENT'
+ Do not allow this variable assignment to be inherited by
+ prerequisites.
+ *Note Suppressing Inheritance::.
+
+'vpath PATTERN PATH'
+ Specify a search path for files matching a '%' pattern.
+ *Note The 'vpath' Directive: Selective Search.
+
+'vpath PATTERN'
+ Remove all search paths previously specified for PATTERN.
+
+'vpath'
+ Remove all search paths previously specified in any 'vpath'
+ directive.
+
+ Here is a summary of the built-in functions (*note Functions::):
+
+'$(subst FROM,TO,TEXT)'
+ Replace FROM with TO in TEXT.
+ *Note Functions for String Substitution and Analysis: Text
+ Functions.
+
+'$(patsubst PATTERN,REPLACEMENT,TEXT)'
+ Replace words matching PATTERN with REPLACEMENT in TEXT.
+ *Note Functions for String Substitution and Analysis: Text
+ Functions.
+
+'$(strip STRING)'
+ Remove excess whitespace characters from STRING.
+ *Note Functions for String Substitution and Analysis: Text
+ Functions.
+
+'$(findstring FIND,TEXT)'
+ Locate FIND in TEXT.
+ *Note Functions for String Substitution and Analysis: Text
+ Functions.
+
+'$(filter PATTERN...,TEXT)'
+ Select words in TEXT that match one of the PATTERN words.
+ *Note Functions for String Substitution and Analysis: Text
+ Functions.
+
+'$(filter-out PATTERN...,TEXT)'
+ Select words in TEXT that _do not_ match any of the PATTERN words.
+ *Note Functions for String Substitution and Analysis: Text
+ Functions.
+
+'$(sort LIST)'
+ Sort the words in LIST lexicographically, removing duplicates.
+ *Note Functions for String Substitution and Analysis: Text
+ Functions.
+
+'$(word N,TEXT)'
+ Extract the Nth word (one-origin) of TEXT.
+ *Note Functions for String Substitution and Analysis: Text
+ Functions.
+
+'$(words TEXT)'
+ Count the number of words in TEXT.
+ *Note Functions for String Substitution and Analysis: Text
+ Functions.
+
+'$(wordlist S,E,TEXT)'
+ Returns the list of words in TEXT from S to E.
+ *Note Functions for String Substitution and Analysis: Text
+ Functions.
+
+'$(firstword NAMES...)'
+ Extract the first word of NAMES.
+ *Note Functions for String Substitution and Analysis: Text
+ Functions.
+
+'$(lastword NAMES...)'
+ Extract the last word of NAMES.
+ *Note Functions for String Substitution and Analysis: Text
+ Functions.
+
+'$(dir NAMES...)'
+ Extract the directory part of each file name.
+ *Note Functions for File Names: File Name Functions.
+
+'$(notdir NAMES...)'
+ Extract the non-directory part of each file name.
+ *Note Functions for File Names: File Name Functions.
+
+'$(suffix NAMES...)'
+ Extract the suffix (the last '.' and following characters) of each
+ file name.
+ *Note Functions for File Names: File Name Functions.
+
+'$(basename NAMES...)'
+ Extract the base name (name without suffix) of each file name.
+ *Note Functions for File Names: File Name Functions.
+
+'$(addsuffix SUFFIX,NAMES...)'
+ Append SUFFIX to each word in NAMES.
+ *Note Functions for File Names: File Name Functions.
+
+'$(addprefix PREFIX,NAMES...)'
+ Prepend PREFIX to each word in NAMES.
+ *Note Functions for File Names: File Name Functions.
+
+'$(join LIST1,LIST2)'
+ Join two parallel lists of words.
+ *Note Functions for File Names: File Name Functions.
+
+'$(wildcard PATTERN...)'
+ Find file names matching a shell file name pattern (_not_ a '%'
+ pattern).
+ *Note The Function 'wildcard': Wildcard Function.
+
+'$(realpath NAMES...)'
+ For each file name in NAMES, expand to an absolute name that does
+ not contain any '.', '..', nor symlinks.
+ *Note Functions for File Names: File Name Functions.
+
+'$(abspath NAMES...)'
+ For each file name in NAMES, expand to an absolute name that does
+ not contain any '.' or '..' components, but preserves symlinks.
+ *Note Functions for File Names: File Name Functions.
+
+'$(error TEXT...)'
+ When this function is evaluated, 'make' generates a fatal error
+ with the message TEXT.
+ *Note Functions That Control Make: Make Control Functions.
+
+'$(warning TEXT...)'
+ When this function is evaluated, 'make' generates a warning with
+ the message TEXT.
+ *Note Functions That Control Make: Make Control Functions.
+
+'$(shell COMMAND)'
+ Execute a shell command and return its output.
+ *Note The 'shell' Function: Shell Function.
+
+'$(origin VARIABLE)'
+ Return a string describing how the 'make' variable VARIABLE was
+ defined.
+ *Note The 'origin' Function: Origin Function.
+
+'$(flavor VARIABLE)'
+ Return a string describing the flavor of the 'make' variable
+ VARIABLE.
+ *Note The 'flavor' Function: Flavor Function.
+
+'$(foreach VAR,WORDS,TEXT)'
+ Evaluate TEXT with VAR bound to each word in WORDS, and concatenate
+ the results.
+ *Note The 'foreach' Function: Foreach Function.
+
+'$(if CONDITION,THEN-PART[,ELSE-PART])'
+ Evaluate the condition CONDITION; if it's non-empty substitute the
+ expansion of the THEN-PART otherwise substitute the expansion of
+ the ELSE-PART.
+ *Note Functions for Conditionals: Conditional Functions.
+
+'$(or CONDITION1[,CONDITION2[,CONDITION3...]])'
+ Evaluate each condition CONDITIONN one at a time; substitute the
+ first non-empty expansion. If all expansions are empty, substitute
+ the empty string.
+ *Note Functions for Conditionals: Conditional Functions.
+
+'$(and CONDITION1[,CONDITION2[,CONDITION3...]])'
+ Evaluate each condition CONDITIONN one at a time; if any expansion
+ results in the empty string substitute the empty string. If all
+ expansions result in a non-empty string, substitute the expansion
+ of the last CONDITION.
+ *Note Functions for Conditionals: Conditional Functions.
+
+'$(call VAR,PARAM,...)'
+ Evaluate the variable VAR replacing any references to '$(1)',
+ '$(2)' with the first, second, etc. PARAM values.
+ *Note The 'call' Function: Call Function.
+
+'$(eval TEXT)'
+ Evaluate TEXT then read the results as makefile commands. Expands
+ to the empty string.
+ *Note The 'eval' Function: Eval Function.
+
+'$(file OP FILENAME,TEXT)'
+ Expand the arguments, then open the file FILENAME using mode OP and
+ write TEXT to that file.
+ *Note The 'file' Function: File Function.
+
+'$(value VAR)'
+ Evaluates to the contents of the variable VAR, with no expansion
+ performed on it.
+ *Note The 'value' Function: Value Function.
+
+ Here is a summary of the automatic variables. *Note Automatic
+Variables::, for full information.
+
+'$@'
+ The file name of the target.
+
+'$%'
+ The target member name, when the target is an archive member.
+
+'$<'
+ The name of the first prerequisite.
+
+'$?'
+ The names of all the prerequisites that are newer than the target,
+ with spaces between them. For prerequisites which are archive
+ members, only the named member is used (*note Archives::).
+
+'$^'
+'$+'
+ The names of all the prerequisites, with spaces between them. For
+ prerequisites which are archive members, only the named member is
+ used (*note Archives::). The value of '$^' omits duplicate
+ prerequisites, while '$+' retains them and preserves their order.
+
+'$*'
+ The stem with which an implicit rule matches (*note How Patterns
+ Match: Pattern Match.).
+
+'$(@D)'
+'$(@F)'
+ The directory part and the file-within-directory part of '$@'.
+
+'$(*D)'
+'$(*F)'
+ The directory part and the file-within-directory part of '$*'.
+
+'$(%D)'
+'$(%F)'
+ The directory part and the file-within-directory part of '$%'.
+
+'$(<D)'
+'$(<F)'
+ The directory part and the file-within-directory part of '$<'.
+
+'$(^D)'
+'$(^F)'
+ The directory part and the file-within-directory part of '$^'.
+
+'$(+D)'
+'$(+F)'
+ The directory part and the file-within-directory part of '$+'.
+
+'$(?D)'
+'$(?F)'
+ The directory part and the file-within-directory part of '$?'.
+
+ These variables are used specially by GNU 'make':
+
+'MAKEFILES'
+
+ Makefiles to be read on every invocation of 'make'.
+ *Note The Variable 'MAKEFILES': MAKEFILES Variable.
+
+'VPATH'
+
+ Directory search path for files not found in the current directory.
+ *Note 'VPATH' Search Path for All Prerequisites: General Search.
+
+'SHELL'
+
+ The name of the system default command interpreter, usually
+ '/bin/sh'. You can set 'SHELL' in the makefile to change the shell
+ used to run recipes. *Note Recipe Execution: Execution. The
+ 'SHELL' variable is handled specially when importing from and
+ exporting to the environment. *Note Choosing the Shell::.
+
+'MAKESHELL'
+
+ On MS-DOS only, the name of the command interpreter that is to be
+ used by 'make'. This value takes precedence over the value of
+ 'SHELL'. *Note MAKESHELL variable: Execution.
+
+'MAKE'
+
+ The name with which 'make' was invoked. Using this variable in
+ recipes has special meaning. *Note How the 'MAKE' Variable Works:
+ MAKE Variable.
+
+'MAKE_VERSION'
+
+ The built-in variable 'MAKE_VERSION' expands to the version number
+ of the GNU 'make' program.
+
+'MAKE_HOST'
+
+ The built-in variable 'MAKE_HOST' expands to a string representing
+ the host that GNU 'make' was built to run on.
+
+'MAKELEVEL'
+
+ The number of levels of recursion (sub-'make's).
+ *Note Variables/Recursion::.
+
+'MAKEFLAGS'
+
+ The flags given to 'make'. You can set this in the environment or
+ a makefile to set flags.
+ *Note Communicating Options to a Sub-'make': Options/Recursion.
+
+ It is _never_ appropriate to use 'MAKEFLAGS' directly in a recipe
+ line: its contents may not be quoted correctly for use in the
+ shell. Always allow recursive 'make''s to obtain these values
+ through the environment from its parent.
+
+'GNUMAKEFLAGS'
+
+ Other flags parsed by 'make'. You can set this in the environment
+ or a makefile to set 'make' command-line flags. GNU 'make' never
+ sets this variable itself. This variable is only needed if you'd
+ like to set GNU 'make'-specific flags in a POSIX-compliant
+ makefile. This variable will be seen by GNU 'make' and ignored by
+ other 'make' implementations. It's not needed if you only use GNU
+ 'make'; just use 'MAKEFLAGS' directly. *Note Communicating Options
+ to a Sub-'make': Options/Recursion.
+
+'MAKECMDGOALS'
+
+ The targets given to 'make' on the command line. Setting this
+ variable has no effect on the operation of 'make'.
+ *Note Arguments to Specify the Goals: Goals.
+
+'CURDIR'
+
+ Set to the pathname of the current working directory (after all
+ '-C' options are processed, if any). Setting this variable has no
+ effect on the operation of 'make'.
+ *Note Recursive Use of 'make': Recursion.
+
+'SUFFIXES'
+
+ The default list of suffixes before 'make' reads any makefiles.
+
+'.LIBPATTERNS'
+ Defines the naming of the libraries 'make' searches for, and their
+ order.
+ *Note Directory Search for Link Libraries: Libraries/Search.
+
+
+File: make.info, Node: Error Messages, Next: Complex Makefile, Prev: Quick Reference, Up: Top
+
+Appendix B Errors Generated by Make
+***********************************
+
+Here is a list of the more common errors you might see generated by
+'make', and some information about what they mean and how to fix them.
+
+ Sometimes 'make' errors are not fatal, especially in the presence of
+a '-' prefix on a recipe line, or the '-k' command line option. Errors
+that are fatal are prefixed with the string '***'.
+
+ Error messages are all either prefixed with the name of the program
+(usually 'make'), or, if the error is found in a makefile, the name of
+the file and line number containing the problem.
+
+ In the table below, these common prefixes are left off.
+
+'[FOO] Error NN'
+'[FOO] SIGNAL DESCRIPTION'
+ These errors are not really 'make' errors at all. They mean that a
+ program that 'make' invoked as part of a recipe returned a non-0
+ error code ('Error NN'), which 'make' interprets as failure, or it
+ exited in some other abnormal fashion (with a signal of some type).
+ *Note Errors in Recipes: Errors.
+
+ If no '***' is attached to the message, then the sub-process failed
+ but the rule in the makefile was prefixed with the '-' special
+ character, so 'make' ignored the error.
+
+'missing separator. Stop.'
+'missing separator (did you mean TAB instead of 8 spaces?). Stop.'
+ This means that 'make' could not understand much of anything about
+ the makefile line it just read. GNU 'make' looks for various
+ separators (':', '=', recipe prefix characters, etc.) to indicate
+ what kind of line it's parsing. This message means it couldn't
+ find a valid one.
+
+ One of the most common reasons for this message is that you (or
+ perhaps your oh-so-helpful editor, as is the case with many
+ MS-Windows editors) have attempted to indent your recipe lines with
+ spaces instead of a tab character. In this case, 'make' will use
+ the second form of the error above. Remember that every line in
+ the recipe must begin with a tab character (unless you set
+ '.RECIPEPREFIX'; *note Special Variables::). Eight spaces do not
+ count. *Note Rule Syntax::.
+
+'recipe commences before first target. Stop.'
+'missing rule before recipe. Stop.'
+ This means the first thing in the makefile seems to be part of a
+ recipe: it begins with a recipe prefix character and doesn't appear
+ to be a legal 'make' directive (such as a variable assignment).
+ Recipes must always be associated with a target.
+
+ The second form is generated if the line has a semicolon as the
+ first non-whitespace character; 'make' interprets this to mean you
+ left out the "target: prerequisite" section of a rule. *Note Rule
+ Syntax::.
+
+'No rule to make target `XXX'.'
+'No rule to make target `XXX', needed by `YYY'.'
+ This means that 'make' decided it needed to build a target, but
+ then couldn't find any instructions in the makefile on how to do
+ that, either explicit or implicit (including in the default rules
+ database).
+
+ If you want that file to be built, you will need to add a rule to
+ your makefile describing how that target can be built. Other
+ possible sources of this problem are typos in the makefile (if that
+ file name is wrong) or a corrupted source tree (if that file is not
+ supposed to be built, but rather only a prerequisite).
+
+'No targets specified and no makefile found. Stop.'
+'No targets. Stop.'
+ The former means that you didn't provide any targets to be built on
+ the command line, and 'make' couldn't find any makefiles to read
+ in. The latter means that some makefile was found, but it didn't
+ contain any default goal and none was given on the command line.
+ GNU 'make' has nothing to do in these situations. *Note Arguments
+ to Specify the Makefile: Makefile Arguments.
+
+'Makefile `XXX' was not found.'
+'Included makefile `XXX' was not found.'
+ A makefile specified on the command line (first form) or included
+ (second form) was not found.
+
+'warning: overriding recipe for target `XXX''
+'warning: ignoring old recipe for target `XXX''
+ GNU 'make' allows only one recipe to be specified per target
+ (except for double-colon rules). If you give a recipe for a target
+ which already has been defined to have one, this warning is issued
+ and the second recipe will overwrite the first. *Note Multiple
+ Rules for One Target: Multiple Rules.
+
+'Circular XXX <- YYY dependency dropped.'
+ This means that 'make' detected a loop in the dependency graph:
+ after tracing the prerequisite YYY of target XXX, and its
+ prerequisites, etc., one of them depended on XXX again.
+
+'Recursive variable `XXX' references itself (eventually). Stop.'
+ This means you've defined a normal (recursive) 'make' variable XXX
+ that, when it's expanded, will refer to itself (XXX). This is not
+ allowed; either use simply-expanded variables (':=' or '::=') or
+ use the append operator ('+='). *Note How to Use Variables: Using
+ Variables.
+
+'Unterminated variable reference. Stop.'
+ This means you forgot to provide the proper closing parenthesis or
+ brace in your variable or function reference.
+
+'insufficient arguments to function `XXX'. Stop.'
+ This means you haven't provided the requisite number of arguments
+ for this function. See the documentation of the function for a
+ description of its arguments. *Note Functions for Transforming
+ Text: Functions.
+
+'missing target pattern. Stop.'
+'multiple target patterns. Stop.'
+'target pattern contains no `%'. Stop.'
+'mixed implicit and static pattern rules. Stop.'
+ These are generated for malformed static pattern rules. The first
+ means there's no pattern in the target section of the rule; the
+ second means there are multiple patterns in the target section; the
+ third means the target doesn't contain a pattern character ('%');
+ and the fourth means that all three parts of the static pattern
+ rule contain pattern characters ('%')-only the first two parts
+ should. If you see these errors and you aren't trying to create a
+ static pattern rule, check the value of any variables in your
+ target and prerequisite lists to be sure they do not contain
+ colons. *Note Syntax of Static Pattern Rules: Static Usage.
+
+'warning: -jN forced in submake: disabling jobserver mode.'
+ This warning and the next are generated if 'make' detects error
+ conditions related to parallel processing on systems where
+ sub-'make's can communicate (*note Communicating Options to a
+ Sub-'make': Options/Recursion.). This warning is generated if a
+ recursive invocation of a 'make' process is forced to have '-jN' in
+ its argument list (where N is greater than one). This could
+ happen, for example, if you set the 'MAKE' environment variable to
+ 'make -j2'. In this case, the sub-'make' doesn't communicate with
+ other 'make' processes and will simply pretend it has two jobs of
+ its own.
+
+'warning: jobserver unavailable: using -j1. Add `+' to parent make rule.'
+ In order for 'make' processes to communicate, the parent will pass
+ information to the child. Since this could result in problems if
+ the child process isn't actually a 'make', the parent will only do
+ this if it thinks the child is a 'make'. The parent uses the
+ normal algorithms to determine this (*note How the 'MAKE' Variable
+ Works: MAKE Variable.). If the makefile is constructed such that
+ the parent doesn't know the child is a 'make' process, then the
+ child will receive only part of the information necessary. In this
+ case, the child will generate this warning message and proceed with
+ its build in a sequential manner.
+
+
+File: make.info, Node: Complex Makefile, Next: GNU Free Documentation License, Prev: Error Messages, Up: Top
+
+Appendix C Complex Makefile Example
+***********************************
+
+Here is the makefile for the GNU 'tar' program. This is a moderately
+complex makefile. The first line uses a '#!' setting to allow the
+makefile to be executed directly.
+
+ Because it is the first target, the default goal is 'all'. An
+interesting feature of this makefile is that 'testpad.h' is a source
+file automatically created by the 'testpad' program, itself compiled
+from 'testpad.c'.
+
+ If you type 'make' or 'make all', then 'make' creates the 'tar'
+executable, the 'rmt' daemon that provides remote tape access, and the
+'tar.info' Info file.
+
+ If you type 'make install', then 'make' not only creates 'tar',
+'rmt', and 'tar.info', but also installs them.
+
+ If you type 'make clean', then 'make' removes the '.o' files, and the
+'tar', 'rmt', 'testpad', 'testpad.h', and 'core' files.
+
+ If you type 'make distclean', then 'make' not only removes the same
+files as does 'make clean' but also the 'TAGS', 'Makefile', and
+'config.status' files. (Although it is not evident, this makefile (and
+'config.status') is generated by the user with the 'configure' program,
+which is provided in the 'tar' distribution, but is not shown here.)
+
+ If you type 'make realclean', then 'make' removes the same files as
+does 'make distclean' and also removes the Info files generated from
+'tar.texinfo'.
+
+ In addition, there are targets 'shar' and 'dist' that create
+distribution kits.
+
+ #!/usr/bin/make -f
+ # Generated automatically from Makefile.in by configure.
+ # Un*x Makefile for GNU tar program.
+ # Copyright (C) 1991 Free Software Foundation, Inc.
+
+ # This program is free software; you can redistribute
+ # it and/or modify it under the terms of the GNU
+ # General Public License ...
+ ...
+ ...
+
+ SHELL = /bin/sh
+
+ #### Start of system configuration section. ####
+
+ srcdir = .
+
+ # If you use gcc, you should either run the
+ # fixincludes script that comes with it or else use
+ # gcc with the -traditional option. Otherwise ioctl
+ # calls will be compiled incorrectly on some systems.
+ CC = gcc -O
+ YACC = bison -y
+ INSTALL = /usr/local/bin/install -c
+ INSTALLDATA = /usr/local/bin/install -c -m 644
+
+ # Things you might add to DEFS:
+ # -DSTDC_HEADERS If you have ANSI C headers and
+ # libraries.
+ # -DPOSIX If you have POSIX.1 headers and
+ # libraries.
+ # -DBSD42 If you have sys/dir.h (unless
+ # you use -DPOSIX), sys/file.h,
+ # and st_blocks in `struct stat'.
+ # -DUSG If you have System V/ANSI C
+ # string and memory functions
+ # and headers, sys/sysmacros.h,
+ # fcntl.h, getcwd, no valloc,
+ # and ndir.h (unless
+ # you use -DDIRENT).
+ # -DNO_MEMORY_H If USG or STDC_HEADERS but do not
+ # include memory.h.
+ # -DDIRENT If USG and you have dirent.h
+ # instead of ndir.h.
+ # -DSIGTYPE=int If your signal handlers
+ # return int, not void.
+ # -DNO_MTIO If you lack sys/mtio.h
+ # (magtape ioctls).
+ # -DNO_REMOTE If you do not have a remote shell
+ # or rexec.
+ # -DUSE_REXEC To use rexec for remote tape
+ # operations instead of
+ # forking rsh or remsh.
+ # -DVPRINTF_MISSING If you lack vprintf function
+ # (but have _doprnt).
+ # -DDOPRNT_MISSING If you lack _doprnt function.
+ # Also need to define
+ # -DVPRINTF_MISSING.
+ # -DFTIME_MISSING If you lack ftime system call.
+ # -DSTRSTR_MISSING If you lack strstr function.
+ # -DVALLOC_MISSING If you lack valloc function.
+ # -DMKDIR_MISSING If you lack mkdir and
+ # rmdir system calls.
+ # -DRENAME_MISSING If you lack rename system call.
+ # -DFTRUNCATE_MISSING If you lack ftruncate
+ # system call.
+ # -DV7 On Version 7 Unix (not
+ # tested in a long time).
+ # -DEMUL_OPEN3 If you lack a 3-argument version
+ # of open, and want to emulate it
+ # with system calls you do have.
+ # -DNO_OPEN3 If you lack the 3-argument open
+ # and want to disable the tar -k
+ # option instead of emulating open.
+ # -DXENIX If you have sys/inode.h
+ # and need it 94 to be included.
+
+ DEFS = -DSIGTYPE=int -DDIRENT -DSTRSTR_MISSING \
+ -DVPRINTF_MISSING -DBSD42
+ # Set this to rtapelib.o unless you defined NO_REMOTE,
+ # in which case make it empty.
+ RTAPELIB = rtapelib.o
+ LIBS =
+ DEF_AR_FILE = /dev/rmt8
+ DEFBLOCKING = 20
+
+ CDEBUG = -g
+ CFLAGS = $(CDEBUG) -I. -I$(srcdir) $(DEFS) \
+ -DDEF_AR_FILE=\"$(DEF_AR_FILE)\" \
+ -DDEFBLOCKING=$(DEFBLOCKING)
+ LDFLAGS = -g
+
+ prefix = /usr/local
+ # Prefix for each installed program,
+ # normally empty or `g'.
+ binprefix =
+
+ # The directory to install tar in.
+ bindir = $(prefix)/bin
+
+ # The directory to install the info files in.
+ infodir = $(prefix)/info
+
+ #### End of system configuration section. ####
+
+ SRCS_C = tar.c create.c extract.c buffer.c \
+ getoldopt.c update.c gnu.c mangle.c \
+ version.c list.c names.c diffarch.c \
+ port.c wildmat.c getopt.c getopt1.c \
+ regex.c
+ SRCS_Y = getdate.y
+ SRCS = $(SRCS_C) $(SRCS_Y)
+ OBJS = $(SRCS_C:.c=.o) $(SRCS_Y:.y=.o) $(RTAPELIB)
+ AUX = README COPYING ChangeLog Makefile.in \
+ makefile.pc configure configure.in \
+ tar.texinfo tar.info* texinfo.tex \
+ tar.h port.h open3.h getopt.h regex.h \
+ rmt.h rmt.c rtapelib.c alloca.c \
+ msd_dir.h msd_dir.c tcexparg.c \
+ level-0 level-1 backup-specs testpad.c
+
+ .PHONY: all
+ all: tar rmt tar.info
+
+ tar: $(OBJS)
+ $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
+
+ rmt: rmt.c
+ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ rmt.c
+
+ tar.info: tar.texinfo
+ makeinfo tar.texinfo
+
+ .PHONY: install
+ install: all
+ $(INSTALL) tar $(bindir)/$(binprefix)tar
+ -test ! -f rmt || $(INSTALL) rmt /etc/rmt
+ $(INSTALLDATA) $(srcdir)/tar.info* $(infodir)
+
+ $(OBJS): tar.h port.h testpad.h
+ regex.o buffer.o tar.o: regex.h
+ # getdate.y has 8 shift/reduce conflicts.
+
+ testpad.h: testpad
+ ./testpad
+
+ testpad: testpad.o
+ $(CC) -o $@ testpad.o
+
+ TAGS: $(SRCS)
+ etags $(SRCS)
+
+ .PHONY: clean
+ clean:
+ rm -f *.o tar rmt testpad testpad.h core
+
+ .PHONY: distclean
+ distclean: clean
+ rm -f TAGS Makefile config.status
+
+ .PHONY: realclean
+ realclean: distclean
+ rm -f tar.info*
+
+ .PHONY: shar
+ shar: $(SRCS) $(AUX)
+ shar $(SRCS) $(AUX) | compress \
+ > tar-`sed -e '/version_string/!d' \
+ -e 's/[^0-9.]*\([0-9.]*\).*/\1/' \
+ -e q
+ version.c`.shar.Z
+
+ .PHONY: dist
+ dist: $(SRCS) $(AUX)
+ echo tar-`sed \
+ -e '/version_string/!d' \
+ -e 's/[^0-9.]*\([0-9.]*\).*/\1/' \
+ -e q
+ version.c` > .fname
+ -rm -rf `cat .fname`
+ mkdir `cat .fname`
+ ln $(SRCS) $(AUX) `cat .fname`
+ tar chZf `cat .fname`.tar.Z `cat .fname`
+ -rm -rf `cat .fname` .fname
+
+ tar.zoo: $(SRCS) $(AUX)
+ -rm -rf tmp.dir
+ -mkdir tmp.dir
+ -rm tar.zoo
+ for X in $(SRCS) $(AUX) ; do \
+ echo $$X ; \
+ sed 's/$$/^M/' $$X \
+ > tmp.dir/$$X ; done
+ cd tmp.dir ; zoo aM ../tar.zoo *
+ -rm -rf tmp.dir
+
+
+File: make.info, Node: GNU Free Documentation License, Next: Concept Index, Prev: Complex Makefile, Up: Top
+
+C.1 GNU Free Documentation License
+==================================
+
+ Version 1.3, 3 November 2008
+
+ Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ <http://fsf.org/>
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ 0. PREAMBLE
+
+ The purpose of this License is to make a manual, textbook, or other
+ functional and useful document "free" in the sense of freedom: to
+ assure everyone the effective freedom to copy and redistribute it,
+ with or without modifying it, either commercially or
+ noncommercially. Secondarily, this License preserves for the
+ author and publisher a way to get credit for their work, while not
+ being considered responsible for modifications made by others.
+
+ This License is a kind of "copyleft", which means that derivative
+ works of the document must themselves be free in the same sense.
+ It complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+
+ We have designed this License in order to use it for manuals for
+ free software, because free software needs free documentation: a
+ free program should come with manuals providing the same freedoms
+ that the software does. But this License is not limited to
+ software manuals; it can be used for any textual work, regardless
+ of subject matter or whether it is published as a printed book. We
+ recommend this License principally for works whose purpose is
+ instruction or reference.
+
+ 1. APPLICABILITY AND DEFINITIONS
+
+ This License applies to any manual or other work, in any medium,
+ that contains a notice placed by the copyright holder saying it can
+ be distributed under the terms of this License. Such a notice
+ grants a world-wide, royalty-free license, unlimited in duration,
+ to use that work under the conditions stated herein. The
+ "Document", below, refers to any such manual or work. Any member
+ of the public is a licensee, and is addressed as "you". You accept
+ the license if you copy, modify or distribute the work in a way
+ requiring permission under copyright law.
+
+ A "Modified Version" of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+
+ A "Secondary Section" is a named appendix or a front-matter section
+ of the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document's overall
+ subject (or to related matters) and contains nothing that could
+ fall directly within that overall subject. (Thus, if the Document
+ is in part a textbook of mathematics, a Secondary Section may not
+ explain any mathematics.) The relationship could be a matter of
+ historical connection with the subject or with related matters, or
+ of legal, commercial, philosophical, ethical or political position
+ regarding them.
+
+ The "Invariant Sections" are certain Secondary Sections whose
+ titles are designated, as being those of Invariant Sections, in the
+ notice that says that the Document is released under this License.
+ If a section does not fit the above definition of Secondary then it
+ is not allowed to be designated as Invariant. The Document may
+ contain zero Invariant Sections. If the Document does not identify
+ any Invariant Sections then there are none.
+
+ The "Cover Texts" are certain short passages of text that are
+ listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+ that says that the Document is released under this License. A
+ Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+ be at most 25 words.
+
+ A "Transparent" copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, that is suitable for revising the document
+ straightforwardly with generic text editors or (for images composed
+ of pixels) generic paint programs or (for drawings) some widely
+ available drawing editor, and that is suitable for input to text
+ formatters or for automatic translation to a variety of formats
+ suitable for input to text formatters. A copy made in an otherwise
+ Transparent file format whose markup, or absence of markup, has
+ been arranged to thwart or discourage subsequent modification by
+ readers is not Transparent. An image format is not Transparent if
+ used for any substantial amount of text. A copy that is not
+ "Transparent" is called "Opaque".
+
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format,
+ SGML or XML using a publicly available DTD, and standard-conforming
+ simple HTML, PostScript or PDF designed for human modification.
+ Examples of transparent image formats include PNG, XCF and JPG.
+ Opaque formats include proprietary formats that can be read and
+ edited only by proprietary word processors, SGML or XML for which
+ the DTD and/or processing tools are not generally available, and
+ the machine-generated HTML, PostScript or PDF produced by some word
+ processors for output purposes only.
+
+ The "Title Page" means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the
+ material this License requires to appear in the title page. For
+ works in formats which do not have any title page as such, "Title
+ Page" means the text near the most prominent appearance of the
+ work's title, preceding the beginning of the body of the text.
+
+ The "publisher" means any person or entity that distributes copies
+ of the Document to the public.
+
+ A section "Entitled XYZ" means a named subunit of the Document
+ whose title either is precisely XYZ or contains XYZ in parentheses
+ following text that translates XYZ in another language. (Here XYZ
+ stands for a specific section name mentioned below, such as
+ "Acknowledgements", "Dedications", "Endorsements", or "History".)
+ To "Preserve the Title" of such a section when you modify the
+ Document means that it remains a section "Entitled XYZ" according
+ to this definition.
+
+ The Document may include Warranty Disclaimers next to the notice
+ which states that this License applies to the Document. These
+ Warranty Disclaimers are considered to be included by reference in
+ this License, but only as regards disclaiming warranties: any other
+ implication that these Warranty Disclaimers may have is void and
+ has no effect on the meaning of this License.
+
+ 2. VERBATIM COPYING
+
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that you
+ add no other conditions whatsoever to those of this License. You
+ may not use technical measures to obstruct or control the reading
+ or further copying of the copies you make or distribute. However,
+ you may accept compensation in exchange for copies. If you
+ distribute a large enough number of copies you must also follow the
+ conditions in section 3.
+
+ You may also lend copies, under the same conditions stated above,
+ and you may publicly display copies.
+
+ 3. COPYING IN QUANTITY
+
+ If you publish printed copies (or copies in media that commonly
+ have printed covers) of the Document, numbering more than 100, and
+ the Document's license notice requires Cover Texts, you must
+ enclose the copies in covers that carry, clearly and legibly, all
+ these Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also clearly
+ and legibly identify you as the publisher of these copies. The
+ front cover must present the full title with all words of the title
+ equally prominent and visible. You may add other material on the
+ covers in addition. Copying with changes limited to the covers, as
+ long as they preserve the title of the Document and satisfy these
+ conditions, can be treated as verbatim copying in other respects.
+
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto
+ adjacent pages.
+
+ If you publish or distribute Opaque copies of the Document
+ numbering more than 100, you must either include a machine-readable
+ Transparent copy along with each Opaque copy, or state in or with
+ each Opaque copy a computer-network location from which the general
+ network-using public has access to download using public-standard
+ network protocols a complete Transparent copy of the Document, free
+ of added material. If you use the latter option, you must take
+ reasonably prudent steps, when you begin distribution of Opaque
+ copies in quantity, to ensure that this Transparent copy will
+ remain thus accessible at the stated location until at least one
+ year after the last time you distribute an Opaque copy (directly or
+ through your agents or retailers) of that edition to the public.
+
+ It is requested, but not required, that you contact the authors of
+ the Document well before redistributing any large number of copies,
+ to give them a chance to provide you with an updated version of the
+ Document.
+
+ 4. MODIFICATIONS
+
+ You may copy and distribute a Modified Version of the Document
+ under the conditions of sections 2 and 3 above, provided that you
+ release the Modified Version under precisely this License, with the
+ Modified Version filling the role of the Document, thus licensing
+ distribution and modification of the Modified Version to whoever
+ possesses a copy of it. In addition, you must do these things in
+ the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title
+ distinct from that of the Document, and from those of previous
+ versions (which should, if there were any, be listed in the
+ History section of the Document). You may use the same title
+ as a previous version if the original publisher of that
+ version gives permission.
+
+ B. List on the Title Page, as authors, one or more persons or
+ entities responsible for authorship of the modifications in
+ the Modified Version, together with at least five of the
+ principal authors of the Document (all of its principal
+ authors, if it has fewer than five), unless they release you
+ from this requirement.
+
+ C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+
+ D. Preserve all the copyright notices of the Document.
+
+ E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+
+ F. Include, immediately after the copyright notices, a license
+ notice giving the public permission to use the Modified
+ Version under the terms of this License, in the form shown in
+ the Addendum below.
+
+ G. Preserve in that license notice the full lists of Invariant
+ Sections and required Cover Texts given in the Document's
+ license notice.
+
+ H. Include an unaltered copy of this License.
+
+ I. Preserve the section Entitled "History", Preserve its Title,
+ and add to it an item stating at least the title, year, new
+ authors, and publisher of the Modified Version as given on the
+ Title Page. If there is no section Entitled "History" in the
+ Document, create one stating the title, year, authors, and
+ publisher of the Document as given on its Title Page, then add
+ an item describing the Modified Version as stated in the
+ previous sentence.
+
+ J. Preserve the network location, if any, given in the Document
+ for public access to a Transparent copy of the Document, and
+ likewise the network locations given in the Document for
+ previous versions it was based on. These may be placed in the
+ "History" section. You may omit a network location for a work
+ that was published at least four years before the Document
+ itself, or if the original publisher of the version it refers
+ to gives permission.
+
+ K. For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, and preserve in the section
+ all the substance and tone of each of the contributor
+ acknowledgements and/or dedications given therein.
+
+ L. Preserve all the Invariant Sections of the Document, unaltered
+ in their text and in their titles. Section numbers or the
+ equivalent are not considered part of the section titles.
+
+ M. Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+
+ N. Do not retitle any existing section to be Entitled
+ "Endorsements" or to conflict in title with any Invariant
+ Section.
+
+ O. Preserve any Warranty Disclaimers.
+
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no
+ material copied from the Document, you may at your option designate
+ some or all of these sections as invariant. To do this, add their
+ titles to the list of Invariant Sections in the Modified Version's
+ license notice. These titles must be distinct from any other
+ section titles.
+
+ You may add a section Entitled "Endorsements", provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties--for example, statements of peer review or that the text
+ has been approved by an organization as the authoritative
+ definition of a standard.
+
+ You may add a passage of up to five words as a Front-Cover Text,
+ and a passage of up to 25 words as a Back-Cover Text, to the end of
+ the list of Cover Texts in the Modified Version. Only one passage
+ of Front-Cover Text and one of Back-Cover Text may be added by (or
+ through arrangements made by) any one entity. If the Document
+ already includes a cover text for the same cover, previously added
+ by you or by arrangement made by the same entity you are acting on
+ behalf of, you may not add another; but you may replace the old
+ one, on explicit permission from the previous publisher that added
+ the old one.
+
+ The author(s) and publisher(s) of the Document do not by this
+ License give permission to use their names for publicity for or to
+ assert or imply endorsement of any Modified Version.
+
+ 5. COMBINING DOCUMENTS
+
+ You may combine the Document with other documents released under
+ this License, under the terms defined in section 4 above for
+ modified versions, provided that you include in the combination all
+ of the Invariant Sections of all of the original documents,
+ unmodified, and list them all as Invariant Sections of your
+ combined work in its license notice, and that you preserve all
+ their Warranty Disclaimers.
+
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy. If there are multiple Invariant Sections with the same name
+ but different contents, make the title of each such section unique
+ by adding at the end of it, in parentheses, the name of the
+ original author or publisher of that section if known, or else a
+ unique number. Make the same adjustment to the section titles in
+ the list of Invariant Sections in the license notice of the
+ combined work.
+
+ In the combination, you must combine any sections Entitled
+ "History" in the various original documents, forming one section
+ Entitled "History"; likewise combine any sections Entitled
+ "Acknowledgements", and any sections Entitled "Dedications". You
+ must delete all sections Entitled "Endorsements."
+
+ 6. COLLECTIONS OF DOCUMENTS
+
+ You may make a collection consisting of the Document and other
+ documents released under this License, and replace the individual
+ copies of this License in the various documents with a single copy
+ that is included in the collection, provided that you follow the
+ rules of this License for verbatim copying of each of the documents
+ in all other respects.
+
+ You may extract a single document from such a collection, and
+ distribute it individually under this License, provided you insert
+ a copy of this License into the extracted document, and follow this
+ License in all other respects regarding verbatim copying of that
+ document.
+
+ 7. AGGREGATION WITH INDEPENDENT WORKS
+
+ A compilation of the Document or its derivatives with other
+ separate and independent documents or works, in or on a volume of a
+ storage or distribution medium, is called an "aggregate" if the
+ copyright resulting from the compilation is not used to limit the
+ legal rights of the compilation's users beyond what the individual
+ works permit. When the Document is included in an aggregate, this
+ License does not apply to the other works in the aggregate which
+ are not themselves derivative works of the Document.
+
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one half
+ of the entire aggregate, the Document's Cover Texts may be placed
+ on covers that bracket the Document within the aggregate, or the
+ electronic equivalent of covers if the Document is in electronic
+ form. Otherwise they must appear on printed covers that bracket
+ the whole aggregate.
+
+ 8. TRANSLATION
+
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section
+ 4. Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include a
+ translation of this License, and all the license notices in the
+ Document, and any Warranty Disclaimers, provided that you also
+ include the original English version of this License and the
+ original versions of those notices and disclaimers. In case of a
+ disagreement between the translation and the original version of
+ this License or a notice or disclaimer, the original version will
+ prevail.
+
+ If a section in the Document is Entitled "Acknowledgements",
+ "Dedications", or "History", the requirement (section 4) to
+ Preserve its Title (section 1) will typically require changing the
+ actual title.
+
+ 9. TERMINATION
+
+ You may not copy, modify, sublicense, or distribute the Document
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense, or distribute it is void,
+ and will automatically terminate your rights under this License.
+
+ However, if you cease all violation of this License, then your
+ license from a particular copyright holder is reinstated (a)
+ provisionally, unless and until the copyright holder explicitly and
+ finally terminates your license, and (b) permanently, if the
+ copyright holder fails to notify you of the violation by some
+ reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+ reinstated permanently if the copyright holder notifies you of the
+ violation by some reasonable means, this is the first time you have
+ received notice of violation of this License (for any work) from
+ that copyright holder, and you cure the violation prior to 30 days
+ after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate
+ the licenses of parties who have received copies or rights from you
+ under this License. If your rights have been terminated and not
+ permanently reinstated, receipt of a copy of some or all of the
+ same material does not give you any rights to use it.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+ The Free Software Foundation may publish new, revised versions of
+ the GNU Free Documentation License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns. See
+ <http://www.gnu.org/copyleft/>.
+
+ Each version of the License is given a distinguishing version
+ number. If the Document specifies that a particular numbered
+ version of this License "or any later version" applies to it, you
+ have the option of following the terms and conditions either of
+ that specified version or of any later version that has been
+ published (not as a draft) by the Free Software Foundation. If the
+ Document does not specify a version number of this License, you may
+ choose any version ever published (not as a draft) by the Free
+ Software Foundation. If the Document specifies that a proxy can
+ decide which future versions of this License can be used, that
+ proxy's public statement of acceptance of a version permanently
+ authorizes you to choose that version for the Document.
+
+ 11. RELICENSING
+
+ "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+ World Wide Web server that publishes copyrightable works and also
+ provides prominent facilities for anybody to edit those works. A
+ public wiki that anybody can edit is an example of such a server.
+ A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+ site means any set of copyrightable works thus published on the MMC
+ site.
+
+ "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+ license published by Creative Commons Corporation, a not-for-profit
+ corporation with a principal place of business in San Francisco,
+ California, as well as future copyleft versions of that license
+ published by that same organization.
+
+ "Incorporate" means to publish or republish a Document, in whole or
+ in part, as part of another Document.
+
+ An MMC is "eligible for relicensing" if it is licensed under this
+ License, and if all works that were first published under this
+ License somewhere other than this MMC, and subsequently
+ incorporated in whole or in part into the MMC, (1) had no cover
+ texts or invariant sections, and (2) were thus incorporated prior
+ to November 1, 2008.
+
+ The operator of an MMC Site may republish an MMC contained in the
+ site under CC-BY-SA on the same site at any time before August 1,
+ 2009, provided the MMC is eligible for relicensing.
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+ Copyright (C) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with
+ the Front-Cover Texts being LIST, and with the Back-Cover Texts
+ being LIST.
+
+ If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+ If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of free
+software license, such as the GNU General Public License, to permit
+their use in free software.
+
+
+File: make.info, Node: Concept Index, Next: Name Index, Prev: GNU Free Documentation License, Up: Top
+
+Index of Concepts
+*****************
+
+
+* Menu:
+
+* !=: Setting. (line 6)
+* !=, expansion: Reading Makefiles. (line 33)
+* '#' (comments), in makefile: Makefile Contents. (line 41)
+* '#' (comments), in recipes: Recipe Syntax. (line 29)
+* '#include': Automatic Prerequisites.
+ (line 16)
+* '$', in function call: Syntax of Functions. (line 6)
+* '$', in rules: Rule Syntax. (line 33)
+* '$', in variable name: Computed Names. (line 6)
+* '$', in variable reference: Reference. (line 6)
+* '%', in pattern rules: Pattern Intro. (line 9)
+* '%', quoting in 'patsubst': Text Functions. (line 26)
+* '%', quoting in static pattern: Static Usage. (line 37)
+* '%', quoting in 'vpath': Selective Search. (line 39)
+* '%', quoting with '\' (backslash): Selective Search. (line 39)
+* '%', quoting with '\' (backslash) <1>: Static Usage. (line 37)
+* '%', quoting with '\' (backslash) <2>: Text Functions. (line 26)
+* '*' (wildcard character): Wildcards. (line 6)
+* +, and 'define': Canned Recipes. (line 49)
+* +, and recipe execution: Instead of Execution.
+ (line 67)
+* +, and recipes: MAKE Variable. (line 18)
+* +=: Appending. (line 6)
+* +=, expansion: Reading Makefiles. (line 33)
+* +=, expansion <1>: Reading Makefiles. (line 33)
+* ,v (RCS file extension): Catalogue of Rules. (line 163)
+* '-' (in recipes): Errors. (line 19)
+* -, and 'define': Canned Recipes. (line 49)
+* '--always-make': Options Summary. (line 15)
+* '--assume-new': Instead of Execution.
+ (line 41)
+* '--assume-new' <1>: Options Summary. (line 284)
+* '--assume-new', and recursion: Options/Recursion. (line 22)
+* '--assume-old': Avoiding Compilation.
+ (line 6)
+* '--assume-old' <1>: Options Summary. (line 163)
+* '--assume-old', and recursion: Options/Recursion. (line 22)
+* '--check-symlink-times': Options Summary. (line 144)
+* '--debug': Options Summary. (line 43)
+* '--directory': Recursion. (line 20)
+* '--directory' <1>: Options Summary. (line 26)
+* '--directory', and '--print-directory': -w Option. (line 20)
+* '--directory', and recursion: Options/Recursion. (line 22)
+* '--dry-run': Echoing. (line 18)
+* '--dry-run' <1>: Instead of Execution.
+ (line 14)
+* '--dry-run' <2>: Options Summary. (line 154)
+* '--environment-overrides': Options Summary. (line 85)
+* '--eval': Options Summary. (line 89)
+* '--file': Makefile Names. (line 23)
+* '--file' <1>: Makefile Arguments. (line 6)
+* '--file' <2>: Options Summary. (line 97)
+* '--file', and recursion: Options/Recursion. (line 22)
+* '--help': Options Summary. (line 103)
+* '--ignore-errors': Errors. (line 30)
+* '--ignore-errors' <1>: Options Summary. (line 108)
+* '--include-dir': Include. (line 53)
+* '--include-dir' <1>: Options Summary. (line 113)
+* '--jobs': Parallel. (line 6)
+* '--jobs' <1>: Options Summary. (line 120)
+* '--jobs', and recursion: Options/Recursion. (line 25)
+* '--just-print': Echoing. (line 18)
+* '--just-print' <1>: Instead of Execution.
+ (line 14)
+* '--just-print' <2>: Options Summary. (line 153)
+* '--keep-going': Errors. (line 47)
+* '--keep-going' <1>: Testing. (line 16)
+* '--keep-going' <2>: Options Summary. (line 129)
+* '--load-average': Parallel. (line 35)
+* '--load-average' <1>: Options Summary. (line 136)
+* '--makefile': Makefile Names. (line 23)
+* '--makefile' <1>: Makefile Arguments. (line 6)
+* '--makefile' <2>: Options Summary. (line 98)
+* '--max-load': Parallel. (line 35)
+* '--max-load' <1>: Options Summary. (line 137)
+* '--new-file': Instead of Execution.
+ (line 41)
+* '--new-file' <1>: Options Summary. (line 283)
+* '--new-file', and recursion: Options/Recursion. (line 22)
+* '--no-builtin-rules': Options Summary. (line 209)
+* '--no-builtin-variables': Options Summary. (line 222)
+* '--no-keep-going': Options Summary. (line 238)
+* '--no-print-directory': -w Option. (line 20)
+* '--no-print-directory' <1>: Options Summary. (line 275)
+* '--old-file': Avoiding Compilation.
+ (line 6)
+* '--old-file' <1>: Options Summary. (line 162)
+* '--old-file', and recursion: Options/Recursion. (line 22)
+* '--output-sync': Parallel Output. (line 11)
+* '--output-sync' <1>: Options Summary. (line 171)
+* '--print-data-base': Options Summary. (line 187)
+* '--print-directory': Options Summary. (line 267)
+* '--print-directory', and '--directory': -w Option. (line 20)
+* '--print-directory', and recursion: -w Option. (line 20)
+* '--print-directory', disabling: -w Option. (line 20)
+* '--question': Instead of Execution.
+ (line 32)
+* '--question' <1>: Options Summary. (line 201)
+* '--quiet': Echoing. (line 24)
+* '--quiet' <1>: Options Summary. (line 232)
+* '--recon': Echoing. (line 18)
+* '--recon' <1>: Instead of Execution.
+ (line 14)
+* '--recon' <2>: Options Summary. (line 155)
+* '--silent': Echoing. (line 24)
+* '--silent' <1>: Options Summary. (line 231)
+* '--stop': Options Summary. (line 239)
+* '--touch': Instead of Execution.
+ (line 24)
+* '--touch' <1>: Options Summary. (line 247)
+* '--touch', and recursion: MAKE Variable. (line 35)
+* '--trace': Options Summary. (line 254)
+* '--version': Options Summary. (line 262)
+* '--warn-undefined-variables': Options Summary. (line 292)
+* '--what-if': Instead of Execution.
+ (line 41)
+* '--what-if' <1>: Options Summary. (line 282)
+* '-b': Options Summary. (line 9)
+* '-B': Options Summary. (line 14)
+* '-C': Recursion. (line 20)
+* '-C' <1>: Options Summary. (line 25)
+* '-C', and '-w': -w Option. (line 20)
+* '-C', and recursion: Options/Recursion. (line 22)
+* '-d': Options Summary. (line 33)
+* '-e': Options Summary. (line 84)
+* '-e' (shell flag): Automatic Prerequisites.
+ (line 65)
+* '-f': Makefile Names. (line 23)
+* '-f' <1>: Makefile Arguments. (line 6)
+* '-f' <2>: Options Summary. (line 96)
+* '-f', and recursion: Options/Recursion. (line 22)
+* '-h': Options Summary. (line 102)
+* '-I': Include. (line 53)
+* '-i': Errors. (line 30)
+* '-i' <1>: Options Summary. (line 107)
+* '-I' <1>: Options Summary. (line 112)
+* '-j': Parallel. (line 6)
+* '-j' <1>: Options Summary. (line 119)
+* '-j', and archive update: Archive Pitfalls. (line 6)
+* '-j', and recursion: Options/Recursion. (line 25)
+* '-k': Errors. (line 47)
+* '-k' <1>: Testing. (line 16)
+* '-k' <2>: Options Summary. (line 128)
+* '-l': Options Summary. (line 135)
+* '-L': Options Summary. (line 143)
+* '-l' (library search): Libraries/Search. (line 6)
+* '-l' (load average): Parallel. (line 35)
+* '-m': Options Summary. (line 10)
+* '-M' (to compiler): Automatic Prerequisites.
+ (line 18)
+* '-MM' (to GNU compiler): Automatic Prerequisites.
+ (line 67)
+* '-n': Echoing. (line 18)
+* '-n' <1>: Instead of Execution.
+ (line 14)
+* '-n' <2>: Options Summary. (line 152)
+* '-O': Parallel Output. (line 11)
+* '-o': Avoiding Compilation.
+ (line 6)
+* '-o' <1>: Options Summary. (line 161)
+* '-O' <1>: Options Summary. (line 170)
+* '-o', and recursion: Options/Recursion. (line 22)
+* '-p': Options Summary. (line 186)
+* '-q': Instead of Execution.
+ (line 32)
+* '-q' <1>: Options Summary. (line 200)
+* '-r': Options Summary. (line 208)
+* '-R': Options Summary. (line 221)
+* '-s': Echoing. (line 24)
+* '-s' <1>: Options Summary. (line 230)
+* '-S': Options Summary. (line 237)
+* '-t': Instead of Execution.
+ (line 24)
+* '-t' <1>: Options Summary. (line 246)
+* '-t', and recursion: MAKE Variable. (line 35)
+* '-v': Options Summary. (line 261)
+* '-W': Instead of Execution.
+ (line 41)
+* '-w': Options Summary. (line 266)
+* '-W' <1>: Options Summary. (line 281)
+* '-w', and '-C': -w Option. (line 20)
+* '-W', and recursion: Options/Recursion. (line 22)
+* '-w', and recursion: -w Option. (line 20)
+* '-w', disabling: -w Option. (line 20)
+* '.a' (archives): Archive Suffix Rules.
+ (line 6)
+* .c: Catalogue of Rules. (line 35)
+* .C: Catalogue of Rules. (line 39)
+* .cc: Catalogue of Rules. (line 39)
+* .ch: Catalogue of Rules. (line 149)
+* .cpp: Catalogue of Rules. (line 39)
+* '.d': Automatic Prerequisites.
+ (line 80)
+* .def: Catalogue of Rules. (line 71)
+* .dvi: Catalogue of Rules. (line 149)
+* .f: Catalogue of Rules. (line 49)
+* .F: Catalogue of Rules. (line 49)
+* .info: Catalogue of Rules. (line 156)
+* .l: Catalogue of Rules. (line 121)
+* '.LIBPATTERNS', and link libraries: Libraries/Search. (line 6)
+* .ln: Catalogue of Rules. (line 143)
+* .mod: Catalogue of Rules. (line 71)
+* .o: Catalogue of Rules. (line 35)
+* .o <1>: Catalogue of Rules. (line 83)
+* '.ONESHELL', use of: One Shell. (line 6)
+* .p: Catalogue of Rules. (line 45)
+* '.PRECIOUS' intermediate files: Chained Rules. (line 56)
+* .r: Catalogue of Rules. (line 49)
+* .s: Catalogue of Rules. (line 76)
+* .S: Catalogue of Rules. (line 79)
+* .sh: Catalogue of Rules. (line 178)
+* '.SHELLFLAGS', value of: Choosing the Shell. (line 6)
+* .sym: Catalogue of Rules. (line 71)
+* .tex: Catalogue of Rules. (line 149)
+* .texi: Catalogue of Rules. (line 156)
+* .texinfo: Catalogue of Rules. (line 156)
+* .txinfo: Catalogue of Rules. (line 156)
+* .w: Catalogue of Rules. (line 149)
+* .web: Catalogue of Rules. (line 149)
+* .y: Catalogue of Rules. (line 117)
+* '::' rules (double-colon): Double-Colon. (line 6)
+* ::=: Flavors. (line 56)
+* ::= <1>: Setting. (line 6)
+* :=: Flavors. (line 56)
+* := <1>: Setting. (line 6)
+* =: Flavors. (line 10)
+* = <1>: Setting. (line 6)
+* =, expansion: Reading Makefiles. (line 33)
+* '?' (wildcard character): Wildcards. (line 6)
+* ?=: Flavors. (line 135)
+* ?= <1>: Setting. (line 6)
+* ?=, expansion: Reading Makefiles. (line 33)
+* '@' (in recipes): Echoing. (line 6)
+* @, and 'define': Canned Recipes. (line 49)
+* '[...]' (wildcard characters): Wildcards. (line 6)
+* '\' (backslash), for continuation lines: Simple Makefile. (line 41)
+* '\' (backslash), in recipes: Splitting Recipe Lines.
+ (line 6)
+* '\' (backslash), to quote '%': Selective Search. (line 39)
+* '\' (backslash), to quote '%' <1>: Static Usage. (line 37)
+* '\' (backslash), to quote '%' <2>: Text Functions. (line 26)
+* '__.SYMDEF': Archive Symbols. (line 6)
+* '~' (tilde): Wildcards. (line 11)
+* abspath: File Name Functions. (line 120)
+* algorithm for directory search: Search Algorithm. (line 6)
+* 'all' (standard target): Goals. (line 73)
+* appending to variables: Appending. (line 6)
+* ar: Implicit Variables. (line 40)
+* archive: Archives. (line 6)
+* archive member targets: Archive Members. (line 6)
+* archive symbol directory updating: Archive Symbols. (line 6)
+* archive, and '-j': Archive Pitfalls. (line 6)
+* archive, and parallel execution: Archive Pitfalls. (line 6)
+* archive, suffix rule for: Archive Suffix Rules.
+ (line 6)
+* Arg list too long: Options/Recursion. (line 58)
+* arguments of functions: Syntax of Functions. (line 6)
+* as: Catalogue of Rules. (line 76)
+* as <1>: Implicit Variables. (line 43)
+* assembly, rule to compile: Catalogue of Rules. (line 76)
+* automatic generation of prerequisites: Include. (line 51)
+* automatic generation of prerequisites <1>: Automatic Prerequisites.
+ (line 6)
+* automatic variables: Automatic Variables. (line 6)
+* automatic variables in prerequisites: Automatic Variables. (line 17)
+* backquotes: Shell Function. (line 6)
+* backslash ('\'), for continuation lines: Simple Makefile. (line 41)
+* backslash ('\'), in recipes: Splitting Recipe Lines.
+ (line 6)
+* backslash ('\'), to quote '%': Selective Search. (line 39)
+* backslash ('\'), to quote '%' <1>: Static Usage. (line 37)
+* backslash ('\'), to quote '%' <2>: Text Functions. (line 26)
+* backslash ('\'), to quote newlines: Splitting Lines. (line 6)
+* backslashes in pathnames and wildcard expansion: Wildcard Pitfall.
+ (line 31)
+* basename: File Name Functions. (line 56)
+* binary packages: Install Command Categories.
+ (line 80)
+* broken pipe: Parallel Input. (line 11)
+* bugs, reporting: Bugs. (line 6)
+* built-in special targets: Special Targets. (line 6)
+* C++, rule to compile: Catalogue of Rules. (line 39)
+* C, rule to compile: Catalogue of Rules. (line 35)
+* canned recipes: Canned Recipes. (line 6)
+* cc: Catalogue of Rules. (line 35)
+* cc <1>: Implicit Variables. (line 46)
+* 'cd' (shell command): Execution. (line 12)
+* 'cd' (shell command) <1>: MAKE Variable. (line 16)
+* chains of rules: Chained Rules. (line 6)
+* 'check' (standard target): Goals. (line 115)
+* 'clean' (standard target): Goals. (line 76)
+* 'clean' target: Simple Makefile. (line 85)
+* 'clean' target <1>: Cleanup. (line 11)
+* cleaning up: Cleanup. (line 6)
+* 'clobber' (standard target): Goals. (line 87)
+* co: Catalogue of Rules. (line 163)
+* co <1>: Implicit Variables. (line 66)
+* combining rules by prerequisite: Combine By Prerequisite.
+ (line 6)
+* command expansion: Shell Function. (line 6)
+* command line variable definitions, and recursion: Options/Recursion.
+ (line 17)
+* command line variables: Overriding. (line 6)
+* commands, sequences of: Canned Recipes. (line 6)
+* comments, in makefile: Makefile Contents. (line 41)
+* comments, in recipes: Recipe Syntax. (line 29)
+* compatibility: Features. (line 6)
+* compatibility in exporting: Variables/Recursion. (line 104)
+* compilation, testing: Testing. (line 6)
+* computed variable name: Computed Names. (line 6)
+* conditional expansion: Conditional Functions.
+ (line 6)
+* conditional variable assignment: Flavors. (line 135)
+* conditionals: Conditionals. (line 6)
+* continuation lines: Simple Makefile. (line 41)
+* controlling make: Make Control Functions.
+ (line 6)
+* conventions for makefiles: Makefile Conventions.
+ (line 6)
+* convert guile types: Guile Types. (line 6)
+* ctangle: Catalogue of Rules. (line 149)
+* ctangle <1>: Implicit Variables. (line 103)
+* cweave: Catalogue of Rules. (line 149)
+* cweave <1>: Implicit Variables. (line 97)
+* data base of 'make' rules: Options Summary. (line 187)
+* deducing recipes (implicit rules): make Deduces. (line 6)
+* default directories for included makefiles: Include. (line 53)
+* default goal: How Make Works. (line 11)
+* default goal <1>: Rules. (line 11)
+* default makefile name: Makefile Names. (line 6)
+* default rules, last-resort: Last Resort. (line 6)
+* define, expansion: Reading Makefiles. (line 33)
+* defining variables verbatim: Multi-Line. (line 6)
+* deletion of target files: Errors. (line 64)
+* deletion of target files <1>: Interrupts. (line 6)
+* directive: Makefile Contents. (line 28)
+* directories, creating installation: Directory Variables. (line 20)
+* directories, printing them: -w Option. (line 6)
+* directories, updating archive symbol: Archive Symbols. (line 6)
+* directory part: File Name Functions. (line 16)
+* directory search ('VPATH'): Directory Search. (line 6)
+* directory search ('VPATH'), and implicit rules: Implicit/Search.
+ (line 6)
+* directory search ('VPATH'), and link libraries: Libraries/Search.
+ (line 6)
+* directory search ('VPATH'), and recipes: Recipes/Search. (line 6)
+* directory search algorithm: Search Algorithm. (line 6)
+* directory search, traditional (GPATH): Search Algorithm. (line 42)
+* 'dist' (standard target): Goals. (line 107)
+* 'distclean' (standard target): Goals. (line 85)
+* dollar sign ('$'), in function call: Syntax of Functions. (line 6)
+* dollar sign ('$'), in rules: Rule Syntax. (line 33)
+* dollar sign ('$'), in variable name: Computed Names. (line 6)
+* dollar sign ('$'), in variable reference: Reference. (line 6)
+* DOS, choosing a shell in: Choosing the Shell. (line 38)
+* double-colon rules: Double-Colon. (line 6)
+* duplicate words, removing: Text Functions. (line 155)
+* E2BIG: Options/Recursion. (line 58)
+* echoing of recipes: Echoing. (line 6)
+* editor: Introduction. (line 22)
+* Emacs ('M-x compile'): Errors. (line 62)
+* empty recipes: Empty Recipes. (line 6)
+* empty targets: Empty Targets. (line 6)
+* environment: Environment. (line 6)
+* environment, and recursion: Variables/Recursion. (line 6)
+* environment, 'SHELL' in: Choosing the Shell. (line 12)
+* error, stopping on: Make Control Functions.
+ (line 11)
+* errors (in recipes): Errors. (line 6)
+* errors with wildcards: Wildcard Pitfall. (line 6)
+* evaluating makefile syntax: Eval Function. (line 6)
+* example of loaded objects: Loaded Object Example.
+ (line 6)
+* example using Guile: Guile Example. (line 6)
+* execution, in parallel: Parallel. (line 6)
+* execution, instead of: Instead of Execution.
+ (line 6)
+* execution, of recipes: Execution. (line 6)
+* exit status (errors): Errors. (line 6)
+* exit status of make: Running. (line 18)
+* expansion, secondary: Secondary Expansion. (line 6)
+* explicit rule, definition of: Makefile Contents. (line 10)
+* explicit rule, expansion: Reading Makefiles. (line 92)
+* explicit rules, secondary expansion of: Secondary Expansion.
+ (line 104)
+* exporting variables: Variables/Recursion. (line 6)
+* extensions, Guile: Guile Integration. (line 6)
+* extensions, load directive: load Directive. (line 6)
+* extensions, loading: Loading Objects. (line 6)
+* f77: Catalogue of Rules. (line 49)
+* f77 <1>: Implicit Variables. (line 57)
+* FDL, GNU Free Documentation License: GNU Free Documentation License.
+ (line 6)
+* features of GNU 'make': Features. (line 6)
+* features, missing: Missing. (line 6)
+* file name functions: File Name Functions. (line 6)
+* file name of makefile: Makefile Names. (line 6)
+* file name of makefile, how to specify: Makefile Names. (line 31)
+* file name prefix, adding: File Name Functions. (line 78)
+* file name suffix: File Name Functions. (line 42)
+* file name suffix, adding: File Name Functions. (line 67)
+* file name with wildcards: Wildcards. (line 6)
+* file name, abspath of: File Name Functions. (line 120)
+* file name, basename of: File Name Functions. (line 56)
+* file name, directory part: File Name Functions. (line 16)
+* file name, nondirectory part: File Name Functions. (line 26)
+* file name, realpath of: File Name Functions. (line 113)
+* file, writing to: File Function. (line 6)
+* files, assuming new: Instead of Execution.
+ (line 41)
+* files, assuming old: Avoiding Compilation.
+ (line 6)
+* files, avoiding recompilation of: Avoiding Compilation.
+ (line 6)
+* files, intermediate: Chained Rules. (line 16)
+* filtering out words: Text Functions. (line 133)
+* filtering words: Text Functions. (line 115)
+* finding strings: Text Functions. (line 104)
+* flags: Options Summary. (line 6)
+* flags for compilers: Implicit Variables. (line 6)
+* flavor of variable: Flavor Function. (line 6)
+* flavors of variables: Flavors. (line 6)
+* 'FORCE': Force Targets. (line 6)
+* force targets: Force Targets. (line 6)
+* Fortran, rule to compile: Catalogue of Rules. (line 49)
+* functions: Functions. (line 6)
+* functions, for controlling make: Make Control Functions.
+ (line 6)
+* functions, for file names: File Name Functions. (line 6)
+* functions, for text: Text Functions. (line 6)
+* functions, syntax of: Syntax of Functions. (line 6)
+* functions, user defined: Call Function. (line 6)
+* g++: Catalogue of Rules. (line 39)
+* g++ <1>: Implicit Variables. (line 49)
+* gcc: Catalogue of Rules. (line 35)
+* generating prerequisites automatically: Include. (line 51)
+* generating prerequisites automatically <1>: Automatic Prerequisites.
+ (line 6)
+* get: Catalogue of Rules. (line 172)
+* get <1>: Implicit Variables. (line 69)
+* globbing (wildcards): Wildcards. (line 6)
+* goal: How Make Works. (line 11)
+* goal, default: How Make Works. (line 11)
+* goal, default <1>: Rules. (line 11)
+* goal, how to specify: Goals. (line 6)
+* Guile: Guile Function. (line 6)
+* Guile <1>: Guile Integration. (line 6)
+* Guile example: Guile Example. (line 6)
+* guile, conversion of types: Guile Types. (line 6)
+* home directory: Wildcards. (line 11)
+* IEEE Standard 1003.2: Overview. (line 13)
+* ifdef, expansion: Reading Makefiles. (line 82)
+* ifeq, expansion: Reading Makefiles. (line 82)
+* ifndef, expansion: Reading Makefiles. (line 82)
+* ifneq, expansion: Reading Makefiles. (line 82)
+* implicit rule: Implicit Rules. (line 6)
+* implicit rule, and directory search: Implicit/Search. (line 6)
+* implicit rule, and 'VPATH': Implicit/Search. (line 6)
+* implicit rule, definition of: Makefile Contents. (line 16)
+* implicit rule, expansion: Reading Makefiles. (line 92)
+* implicit rule, how to use: Using Implicit. (line 6)
+* implicit rule, introduction to: make Deduces. (line 6)
+* implicit rule, predefined: Catalogue of Rules. (line 6)
+* implicit rule, search algorithm: Implicit Rule Search.
+ (line 6)
+* implicit rules, secondary expansion of: Secondary Expansion.
+ (line 144)
+* included makefiles, default directories: Include. (line 53)
+* including ('MAKEFILES' variable): MAKEFILES Variable. (line 6)
+* including ('MAKEFILE_LIST' variable): Special Variables. (line 8)
+* including other makefiles: Include. (line 6)
+* incompatibilities: Missing. (line 6)
+* Info, rule to format: Catalogue of Rules. (line 156)
+* inheritance, suppressing: Suppressing Inheritance.
+ (line 6)
+* input during parallel execution: Parallel Input. (line 6)
+* 'install' (standard target): Goals. (line 93)
+* installation directories, creating: Directory Variables. (line 20)
+* installations, staged: DESTDIR. (line 6)
+* interface for loaded objects: Loaded Object API. (line 6)
+* intermediate files: Chained Rules. (line 16)
+* intermediate files, preserving: Chained Rules. (line 46)
+* intermediate targets, explicit: Special Targets. (line 48)
+* interrupt: Interrupts. (line 6)
+* job slots: Parallel. (line 6)
+* job slots, and recursion: Options/Recursion. (line 25)
+* jobs, limiting based on load: Parallel. (line 35)
+* joining lists of words: File Name Functions. (line 89)
+* killing (interruption): Interrupts. (line 6)
+* last-resort default rules: Last Resort. (line 6)
+* ld: Catalogue of Rules. (line 83)
+* lex: Catalogue of Rules. (line 121)
+* lex <1>: Implicit Variables. (line 73)
+* Lex, rule to run: Catalogue of Rules. (line 121)
+* libraries for linking, directory search: Libraries/Search. (line 6)
+* library archive, suffix rule for: Archive Suffix Rules.
+ (line 6)
+* limiting jobs based on load: Parallel. (line 35)
+* link libraries, and directory search: Libraries/Search. (line 6)
+* link libraries, patterns matching: Libraries/Search. (line 6)
+* linking, predefined rule for: Catalogue of Rules. (line 83)
+* lint: Catalogue of Rules. (line 143)
+* lint <1>: Implicit Variables. (line 80)
+* 'lint', rule to run: Catalogue of Rules. (line 143)
+* list of all prerequisites: Automatic Variables. (line 61)
+* list of changed prerequisites: Automatic Variables. (line 51)
+* load average: Parallel. (line 35)
+* load directive: load Directive. (line 6)
+* loaded object API: Loaded Object API. (line 6)
+* loaded object example: Loaded Object Example.
+ (line 6)
+* loaded object licensing: Loaded Object API. (line 31)
+* loaded objects: Loading Objects. (line 6)
+* loaded objects, remaking of: Remaking Loaded Objects.
+ (line 6)
+* long lines, splitting: Splitting Lines. (line 6)
+* loops in variable expansion: Flavors. (line 44)
+* 'lpr' (shell command): Wildcard Examples. (line 21)
+* 'lpr' (shell command) <1>: Empty Targets. (line 25)
+* m2c: Catalogue of Rules. (line 71)
+* m2c <1>: Implicit Variables. (line 60)
+* macro: Using Variables. (line 10)
+* 'make depend': Automatic Prerequisites.
+ (line 37)
+* make extensions: Extending make. (line 6)
+* make interface to guile: Guile Interface. (line 6)
+* make procedures in guile: Guile Interface. (line 6)
+* makefile: Introduction. (line 7)
+* makefile name: Makefile Names. (line 6)
+* makefile name, how to specify: Makefile Names. (line 31)
+* makefile rule parts: Rule Introduction. (line 6)
+* makefile syntax, evaluating: Eval Function. (line 6)
+* makefile, and 'MAKEFILES' variable: MAKEFILES Variable. (line 6)
+* makefile, conventions for: Makefile Conventions.
+ (line 6)
+* makefile, how 'make' processes: How Make Works. (line 6)
+* makefile, how to write: Makefiles. (line 6)
+* makefile, including: Include. (line 6)
+* makefile, overriding: Overriding Makefiles.
+ (line 6)
+* makefile, parsing: Reading Makefiles. (line 6)
+* makefile, remaking of: Remaking Makefiles. (line 6)
+* makefile, simple: Simple Makefile. (line 6)
+* makefiles, and 'MAKEFILE_LIST' variable: Special Variables. (line 8)
+* makefiles, and special variables: Special Variables. (line 6)
+* makeinfo: Catalogue of Rules. (line 156)
+* makeinfo <1>: Implicit Variables. (line 84)
+* match-anything rule: Match-Anything Rules.
+ (line 6)
+* match-anything rule, used to override: Overriding Makefiles.
+ (line 12)
+* missing features: Missing. (line 6)
+* mistakes with wildcards: Wildcard Pitfall. (line 6)
+* modified variable reference: Substitution Refs. (line 6)
+* Modula-2, rule to compile: Catalogue of Rules. (line 71)
+* 'mostlyclean' (standard target): Goals. (line 79)
+* multi-line variable definition: Multi-Line. (line 6)
+* multiple rules for one target: Multiple Rules. (line 6)
+* multiple rules for one target ('::'): Double-Colon. (line 6)
+* multiple targets: Multiple Targets. (line 6)
+* multiple targets, in pattern rule: Pattern Intro. (line 53)
+* name of makefile: Makefile Names. (line 6)
+* name of makefile, how to specify: Makefile Names. (line 31)
+* nested variable reference: Computed Names. (line 6)
+* newline, quoting, in makefile: Simple Makefile. (line 41)
+* newline, quoting, in recipes: Splitting Recipe Lines.
+ (line 6)
+* nondirectory part: File Name Functions. (line 26)
+* normal prerequisites: Prerequisite Types. (line 6)
+* 'obj': Variables Simplify. (line 20)
+* 'OBJ': Variables Simplify. (line 20)
+* 'objects': Variables Simplify. (line 14)
+* 'OBJECTS': Variables Simplify. (line 20)
+* objects, loaded: Loading Objects. (line 6)
+* 'objs': Variables Simplify. (line 20)
+* 'OBJS': Variables Simplify. (line 20)
+* old-fashioned suffix rules: Suffix Rules. (line 6)
+* options: Options Summary. (line 6)
+* options, and recursion: Options/Recursion. (line 6)
+* options, setting from environment: Options/Recursion. (line 81)
+* options, setting in makefiles: Options/Recursion. (line 81)
+* order of pattern rules: Pattern Match. (line 30)
+* order-only prerequisites: Prerequisite Types. (line 6)
+* origin of variable: Origin Function. (line 6)
+* output during parallel execution: Parallel Output. (line 6)
+* output during parallel execution <1>: Options Summary. (line 171)
+* overriding makefiles: Overriding Makefiles.
+ (line 6)
+* overriding variables with arguments: Overriding. (line 6)
+* overriding with 'override': Override Directive. (line 6)
+* parallel execution: Parallel. (line 6)
+* parallel execution, and archive update: Archive Pitfalls. (line 6)
+* parallel execution, input during: Parallel Input. (line 6)
+* parallel execution, output during: Parallel Output. (line 6)
+* parallel execution, output during <1>: Options Summary. (line 171)
+* parallel execution, overriding: Special Targets. (line 142)
+* parts of makefile rule: Rule Introduction. (line 6)
+* Pascal, rule to compile: Catalogue of Rules. (line 45)
+* pattern rule: Pattern Intro. (line 6)
+* pattern rule, expansion: Reading Makefiles. (line 92)
+* pattern rules, order of: Pattern Match. (line 30)
+* pattern rules, static (not implicit): Static Pattern. (line 6)
+* pattern rules, static, syntax of: Static Usage. (line 6)
+* pattern-specific variables: Pattern-specific. (line 6)
+* pc: Catalogue of Rules. (line 45)
+* pc <1>: Implicit Variables. (line 63)
+* phony targets: Phony Targets. (line 6)
+* phony targets and recipe execution: Instead of Execution.
+ (line 75)
+* pitfalls of wildcards: Wildcard Pitfall. (line 6)
+* plugin_is_GPL_compatible: Loaded Object API. (line 31)
+* portability: Features. (line 6)
+* POSIX: Overview. (line 13)
+* POSIX <1>: Options/Recursion. (line 61)
+* POSIX-conforming mode, setting: Special Targets. (line 157)
+* post-installation commands: Install Command Categories.
+ (line 6)
+* pre-installation commands: Install Command Categories.
+ (line 6)
+* precious targets: Special Targets. (line 32)
+* predefined rules and variables, printing: Options Summary. (line 187)
+* prefix, adding: File Name Functions. (line 78)
+* prerequisite: Rules. (line 6)
+* prerequisite pattern, implicit: Pattern Intro. (line 22)
+* prerequisite pattern, static (not implicit): Static Usage. (line 30)
+* prerequisite types: Prerequisite Types. (line 6)
+* prerequisite, expansion: Reading Makefiles. (line 92)
+* prerequisites: Rule Syntax. (line 47)
+* prerequisites, and automatic variables: Automatic Variables.
+ (line 17)
+* prerequisites, automatic generation: Include. (line 51)
+* prerequisites, automatic generation <1>: Automatic Prerequisites.
+ (line 6)
+* prerequisites, introduction to: Rule Introduction. (line 8)
+* prerequisites, list of all: Automatic Variables. (line 61)
+* prerequisites, list of changed: Automatic Variables. (line 51)
+* prerequisites, normal: Prerequisite Types. (line 6)
+* prerequisites, order-only: Prerequisite Types. (line 6)
+* prerequisites, varying (static pattern): Static Pattern. (line 6)
+* preserving intermediate files: Chained Rules. (line 46)
+* preserving with '.PRECIOUS': Special Targets. (line 32)
+* preserving with '.PRECIOUS' <1>: Chained Rules. (line 56)
+* preserving with '.SECONDARY': Special Targets. (line 54)
+* 'print' (standard target): Goals. (line 98)
+* 'print' target: Wildcard Examples. (line 21)
+* 'print' target <1>: Empty Targets. (line 25)
+* printing directories: -w Option. (line 6)
+* printing messages: Make Control Functions.
+ (line 43)
+* printing of recipes: Echoing. (line 6)
+* printing user warnings: Make Control Functions.
+ (line 35)
+* problems and bugs, reporting: Bugs. (line 6)
+* problems with wildcards: Wildcard Pitfall. (line 6)
+* processing a makefile: How Make Works. (line 6)
+* question mode: Instead of Execution.
+ (line 32)
+* quoting '%', in 'patsubst': Text Functions. (line 26)
+* quoting '%', in static pattern: Static Usage. (line 37)
+* quoting '%', in 'vpath': Selective Search. (line 39)
+* quoting newline, in makefile: Simple Makefile. (line 41)
+* quoting newline, in recipes: Splitting Recipe Lines.
+ (line 6)
+* Ratfor, rule to compile: Catalogue of Rules. (line 49)
+* RCS, rule to extract from: Catalogue of Rules. (line 163)
+* reading makefiles: Reading Makefiles. (line 6)
+* 'README': Makefile Names. (line 9)
+* 'realclean' (standard target): Goals. (line 86)
+* realpath: File Name Functions. (line 113)
+* recipe: Simple Makefile. (line 74)
+* recipe execution, single invocation: Special Targets. (line 150)
+* recipe lines, single shell: One Shell. (line 6)
+* recipe syntax: Recipe Syntax. (line 6)
+* recipe, execution: Execution. (line 6)
+* recipes: Rule Syntax. (line 25)
+* recipes <1>: Recipes. (line 6)
+* recipes setting shell variables: Execution. (line 12)
+* recipes, and directory search: Recipes/Search. (line 6)
+* recipes, backslash ('\') in: Splitting Recipe Lines.
+ (line 6)
+* recipes, canned: Canned Recipes. (line 6)
+* recipes, comments in: Recipe Syntax. (line 29)
+* recipes, echoing: Echoing. (line 6)
+* recipes, empty: Empty Recipes. (line 6)
+* recipes, errors in: Errors. (line 6)
+* recipes, execution in parallel: Parallel. (line 6)
+* recipes, how to write: Recipes. (line 6)
+* recipes, instead of executing: Instead of Execution.
+ (line 6)
+* recipes, introduction to: Rule Introduction. (line 8)
+* recipes, quoting newlines in: Splitting Recipe Lines.
+ (line 6)
+* recipes, splitting: Splitting Recipe Lines.
+ (line 6)
+* recipes, using variables in: Variables in Recipes.
+ (line 6)
+* recompilation: Introduction. (line 22)
+* recompilation, avoiding: Avoiding Compilation.
+ (line 6)
+* recording events with empty targets: Empty Targets. (line 6)
+* recursion: Recursion. (line 6)
+* recursion, and '-C': Options/Recursion. (line 22)
+* recursion, and '-f': Options/Recursion. (line 22)
+* recursion, and '-j': Options/Recursion. (line 25)
+* recursion, and '-o': Options/Recursion. (line 22)
+* recursion, and '-t': MAKE Variable. (line 35)
+* recursion, and '-W': Options/Recursion. (line 22)
+* recursion, and '-w': -w Option. (line 20)
+* recursion, and command line variable definitions: Options/Recursion.
+ (line 17)
+* recursion, and environment: Variables/Recursion. (line 6)
+* recursion, and 'MAKE' variable: MAKE Variable. (line 6)
+* recursion, and 'MAKEFILES' variable: MAKEFILES Variable. (line 15)
+* recursion, and options: Options/Recursion. (line 6)
+* recursion, and printing directories: -w Option. (line 6)
+* recursion, and variables: Variables/Recursion. (line 6)
+* recursion, level of: Variables/Recursion. (line 114)
+* recursive variable expansion: Using Variables. (line 6)
+* recursive variable expansion <1>: Flavors. (line 6)
+* recursively expanded variables: Flavors. (line 6)
+* reference to variables: Reference. (line 6)
+* reference to variables <1>: Advanced. (line 6)
+* relinking: How Make Works. (line 46)
+* remaking loaded objects: Remaking Loaded Objects.
+ (line 6)
+* remaking makefiles: Remaking Makefiles. (line 6)
+* removal of target files: Errors. (line 64)
+* removal of target files <1>: Interrupts. (line 6)
+* removing duplicate words: Text Functions. (line 155)
+* removing targets on failure: Special Targets. (line 71)
+* removing, to clean up: Cleanup. (line 6)
+* reporting bugs: Bugs. (line 6)
+* rm: Implicit Variables. (line 106)
+* 'rm' (shell command): Simple Makefile. (line 85)
+* 'rm' (shell command) <1>: Wildcard Examples. (line 12)
+* 'rm' (shell command) <2>: Phony Targets. (line 20)
+* 'rm' (shell command) <3>: Errors. (line 27)
+* rule prerequisites: Rule Syntax. (line 47)
+* rule syntax: Rule Syntax. (line 6)
+* rule targets: Rule Syntax. (line 18)
+* rule, double-colon ('::'): Double-Colon. (line 6)
+* rule, explicit, definition of: Makefile Contents. (line 10)
+* rule, how to write: Rules. (line 6)
+* rule, implicit: Implicit Rules. (line 6)
+* rule, implicit, and directory search: Implicit/Search. (line 6)
+* rule, implicit, and 'VPATH': Implicit/Search. (line 6)
+* rule, implicit, chains of: Chained Rules. (line 6)
+* rule, implicit, definition of: Makefile Contents. (line 16)
+* rule, implicit, how to use: Using Implicit. (line 6)
+* rule, implicit, introduction to: make Deduces. (line 6)
+* rule, implicit, predefined: Catalogue of Rules. (line 6)
+* rule, introduction to: Rule Introduction. (line 6)
+* rule, multiple for one target: Multiple Rules. (line 6)
+* rule, no recipe or prerequisites: Force Targets. (line 6)
+* rule, pattern: Pattern Intro. (line 6)
+* rule, static pattern: Static Pattern. (line 6)
+* rule, static pattern versus implicit: Static versus Implicit.
+ (line 6)
+* rule, with multiple targets: Multiple Targets. (line 6)
+* rules, and '$': Rule Syntax. (line 33)
+* s. (SCCS file prefix): Catalogue of Rules. (line 172)
+* SCCS, rule to extract from: Catalogue of Rules. (line 172)
+* search algorithm, implicit rule: Implicit Rule Search.
+ (line 6)
+* search path for prerequisites ('VPATH'): Directory Search. (line 6)
+* search path for prerequisites ('VPATH'), and implicit rules: Implicit/Search.
+ (line 6)
+* search path for prerequisites ('VPATH'), and link libraries: Libraries/Search.
+ (line 6)
+* searching for strings: Text Functions. (line 104)
+* secondary expansion: Secondary Expansion. (line 6)
+* secondary expansion and explicit rules: Secondary Expansion.
+ (line 104)
+* secondary expansion and implicit rules: Secondary Expansion.
+ (line 144)
+* secondary expansion and static pattern rules: Secondary Expansion.
+ (line 136)
+* secondary files: Chained Rules. (line 46)
+* secondary targets: Special Targets. (line 54)
+* 'sed' (shell command): Automatic Prerequisites.
+ (line 72)
+* selecting a word: Text Functions. (line 159)
+* selecting word lists: Text Functions. (line 168)
+* sequences of commands: Canned Recipes. (line 6)
+* setting options from environment: Options/Recursion. (line 81)
+* setting options in makefiles: Options/Recursion. (line 81)
+* setting variables: Setting. (line 6)
+* several rules for one target: Multiple Rules. (line 6)
+* several targets in a rule: Multiple Targets. (line 6)
+* 'shar' (standard target): Goals. (line 104)
+* shell command, function for: Shell Function. (line 6)
+* shell file name pattern (in 'include'): Include. (line 13)
+* shell variables, setting in recipes: Execution. (line 12)
+* shell wildcards (in 'include'): Include. (line 13)
+* shell, choosing the: Choosing the Shell. (line 6)
+* SHELL, exported value: Variables/Recursion. (line 23)
+* SHELL, import from environment: Environment. (line 37)
+* shell, in DOS and Windows: Choosing the Shell. (line 38)
+* 'SHELL', MS-DOS specifics: Choosing the Shell. (line 44)
+* 'SHELL', value of: Choosing the Shell. (line 6)
+* signal: Interrupts. (line 6)
+* silent operation: Echoing. (line 6)
+* simple makefile: Simple Makefile. (line 6)
+* simple variable expansion: Using Variables. (line 6)
+* simplifying with variables: Variables Simplify. (line 6)
+* simply expanded variables: Flavors. (line 56)
+* sorting words: Text Functions. (line 147)
+* spaces, in variable values: Flavors. (line 107)
+* spaces, stripping: Text Functions. (line 80)
+* special targets: Special Targets. (line 6)
+* special variables: Special Variables. (line 6)
+* specifying makefile name: Makefile Names. (line 31)
+* splitting long lines: Splitting Lines. (line 6)
+* splitting recipes: Splitting Recipe Lines.
+ (line 6)
+* staged installs: DESTDIR. (line 6)
+* standard input: Parallel Input. (line 6)
+* standards conformance: Overview. (line 13)
+* standards for makefiles: Makefile Conventions.
+ (line 6)
+* static pattern rule: Static Pattern. (line 6)
+* static pattern rule, syntax of: Static Usage. (line 6)
+* static pattern rule, versus implicit: Static versus Implicit.
+ (line 6)
+* static pattern rules, secondary expansion of: Secondary Expansion.
+ (line 136)
+* stem: Static Usage. (line 17)
+* stem <1>: Pattern Match. (line 6)
+* stem, shortest: Pattern Match. (line 38)
+* stem, variable for: Automatic Variables. (line 77)
+* stopping make: Make Control Functions.
+ (line 11)
+* strings, searching for: Text Functions. (line 104)
+* stripping whitespace: Text Functions. (line 80)
+* sub-'make': Variables/Recursion. (line 6)
+* subdirectories, recursion for: Recursion. (line 6)
+* substitution variable reference: Substitution Refs. (line 6)
+* suffix rule: Suffix Rules. (line 6)
+* suffix rule, for archive: Archive Suffix Rules.
+ (line 6)
+* suffix, adding: File Name Functions. (line 67)
+* suffix, function to find: File Name Functions. (line 42)
+* suffix, substituting in variables: Substitution Refs. (line 6)
+* suppressing inheritance: Suppressing Inheritance.
+ (line 6)
+* switches: Options Summary. (line 6)
+* symbol directories, updating archive: Archive Symbols. (line 6)
+* syntax of recipe: Recipe Syntax. (line 6)
+* syntax of rules: Rule Syntax. (line 6)
+* tab character (in commands): Rule Syntax. (line 25)
+* tabs in rules: Rule Introduction. (line 21)
+* 'TAGS' (standard target): Goals. (line 112)
+* tangle: Catalogue of Rules. (line 149)
+* tangle <1>: Implicit Variables. (line 100)
+* 'tar' (standard target): Goals. (line 101)
+* target: Rules. (line 6)
+* target pattern, implicit: Pattern Intro. (line 9)
+* target pattern, static (not implicit): Static Usage. (line 17)
+* target, deleting on error: Errors. (line 64)
+* target, deleting on interrupt: Interrupts. (line 6)
+* target, expansion: Reading Makefiles. (line 92)
+* target, multiple in pattern rule: Pattern Intro. (line 53)
+* target, multiple rules for one: Multiple Rules. (line 6)
+* target, touching: Instead of Execution.
+ (line 24)
+* target-specific variables: Target-specific. (line 6)
+* targets: Rule Syntax. (line 18)
+* targets without a file: Phony Targets. (line 6)
+* targets, built-in special: Special Targets. (line 6)
+* targets, empty: Empty Targets. (line 6)
+* targets, force: Force Targets. (line 6)
+* targets, introduction to: Rule Introduction. (line 8)
+* targets, multiple: Multiple Targets. (line 6)
+* targets, phony: Phony Targets. (line 6)
+* terminal rule: Match-Anything Rules.
+ (line 6)
+* 'test' (standard target): Goals. (line 116)
+* testing compilation: Testing. (line 6)
+* tex: Catalogue of Rules. (line 149)
+* tex <1>: Implicit Variables. (line 87)
+* TeX, rule to run: Catalogue of Rules. (line 149)
+* texi2dvi: Catalogue of Rules. (line 156)
+* texi2dvi <1>: Implicit Variables. (line 91)
+* Texinfo, rule to format: Catalogue of Rules. (line 156)
+* tilde ('~'): Wildcards. (line 11)
+* 'touch' (shell command): Wildcard Examples. (line 21)
+* 'touch' (shell command) <1>: Empty Targets. (line 25)
+* touching files: Instead of Execution.
+ (line 24)
+* traditional directory search (GPATH): Search Algorithm. (line 42)
+* types of prerequisites: Prerequisite Types. (line 6)
+* types, conversion of: Guile Types. (line 6)
+* undefined variables, warning message: Options Summary. (line 292)
+* undefining variable: Undefine Directive. (line 6)
+* updating archive symbol directories: Archive Symbols. (line 6)
+* updating loaded objects: Remaking Loaded Objects.
+ (line 6)
+* updating makefiles: Remaking Makefiles. (line 6)
+* user defined functions: Call Function. (line 6)
+* value: Using Variables. (line 6)
+* value, how a variable gets it: Values. (line 6)
+* variable: Using Variables. (line 6)
+* variable definition: Makefile Contents. (line 22)
+* variable references in recipes: Variables in Recipes.
+ (line 6)
+* variables: Variables Simplify. (line 6)
+* variables, '$' in name: Computed Names. (line 6)
+* variables, and implicit rule: Automatic Variables. (line 6)
+* variables, appending to: Appending. (line 6)
+* variables, automatic: Automatic Variables. (line 6)
+* variables, command line: Overriding. (line 6)
+* variables, command line, and recursion: Options/Recursion. (line 17)
+* variables, computed names: Computed Names. (line 6)
+* variables, conditional assignment: Flavors. (line 135)
+* variables, defining verbatim: Multi-Line. (line 6)
+* variables, environment: Variables/Recursion. (line 6)
+* variables, environment <1>: Environment. (line 6)
+* variables, exporting: Variables/Recursion. (line 6)
+* variables, flavor of: Flavor Function. (line 6)
+* variables, flavors: Flavors. (line 6)
+* variables, how they get their values: Values. (line 6)
+* variables, how to reference: Reference. (line 6)
+* variables, loops in expansion: Flavors. (line 44)
+* variables, modified reference: Substitution Refs. (line 6)
+* variables, multi-line: Multi-Line. (line 6)
+* variables, nested references: Computed Names. (line 6)
+* variables, origin of: Origin Function. (line 6)
+* variables, overriding: Override Directive. (line 6)
+* variables, overriding with arguments: Overriding. (line 6)
+* variables, pattern-specific: Pattern-specific. (line 6)
+* variables, recursively expanded: Flavors. (line 6)
+* variables, setting: Setting. (line 6)
+* variables, simply expanded: Flavors. (line 56)
+* variables, spaces in values: Flavors. (line 107)
+* variables, substituting suffix in: Substitution Refs. (line 6)
+* variables, substitution reference: Substitution Refs. (line 6)
+* variables, target-specific: Target-specific. (line 6)
+* variables, unexpanded value: Value Function. (line 6)
+* variables, warning for undefined: Options Summary. (line 292)
+* varying prerequisites: Static Pattern. (line 6)
+* verbatim variable definition: Multi-Line. (line 6)
+* vpath: Directory Search. (line 6)
+* 'VPATH', and implicit rules: Implicit/Search. (line 6)
+* 'VPATH', and link libraries: Libraries/Search. (line 6)
+* warnings, printing: Make Control Functions.
+ (line 35)
+* weave: Catalogue of Rules. (line 149)
+* weave <1>: Implicit Variables. (line 94)
+* Web, rule to run: Catalogue of Rules. (line 149)
+* what if: Instead of Execution.
+ (line 41)
+* whitespace, in variable values: Flavors. (line 107)
+* whitespace, stripping: Text Functions. (line 80)
+* wildcard: Wildcards. (line 6)
+* wildcard pitfalls: Wildcard Pitfall. (line 6)
+* wildcard, function: File Name Functions. (line 106)
+* wildcard, in archive member: Archive Members. (line 36)
+* wildcard, in 'include': Include. (line 13)
+* wildcards and MS-DOS/MS-Windows backslashes: Wildcard Pitfall.
+ (line 31)
+* Windows, choosing a shell in: Choosing the Shell. (line 38)
+* word, selecting a: Text Functions. (line 159)
+* words, extracting first: Text Functions. (line 185)
+* words, extracting last: Text Functions. (line 198)
+* words, filtering: Text Functions. (line 115)
+* words, filtering out: Text Functions. (line 133)
+* words, finding number: Text Functions. (line 180)
+* words, iterating over: Foreach Function. (line 6)
+* words, joining lists: File Name Functions. (line 89)
+* words, removing duplicates: Text Functions. (line 155)
+* words, selecting lists of: Text Functions. (line 168)
+* writing recipes: Recipes. (line 6)
+* writing rules: Rules. (line 6)
+* writing to a file: File Function. (line 6)
+* yacc: Catalogue of Rules. (line 117)
+* yacc <1>: Implicit Variables. (line 77)
+* 'yacc': Canned Recipes. (line 18)
+* Yacc, rule to run: Catalogue of Rules. (line 117)
+
+
+File: make.info, Node: Name Index, Prev: Concept Index, Up: Top
+
+Index of Functions, Variables, & Directives
+*******************************************
+
+
+* Menu:
+
+* $%: Automatic Variables. (line 37)
+* $(%D): Automatic Variables. (line 129)
+* $(%F): Automatic Variables. (line 130)
+* $(*D): Automatic Variables. (line 124)
+* $(*F): Automatic Variables. (line 125)
+* $(+D): Automatic Variables. (line 147)
+* $(+F): Automatic Variables. (line 148)
+* $(<D): Automatic Variables. (line 137)
+* $(<F): Automatic Variables. (line 138)
+* $(?D): Automatic Variables. (line 153)
+* $(?F): Automatic Variables. (line 154)
+* $(@D): Automatic Variables. (line 113)
+* $(@F): Automatic Variables. (line 119)
+* $(^D): Automatic Variables. (line 142)
+* $(^F): Automatic Variables. (line 143)
+* $*: Automatic Variables. (line 73)
+* $*, and static pattern: Static Usage. (line 82)
+* $+: Automatic Variables. (line 63)
+* $<: Automatic Variables. (line 43)
+* $?: Automatic Variables. (line 48)
+* $@: Automatic Variables. (line 30)
+* $^: Automatic Variables. (line 53)
+* $|: Automatic Variables. (line 69)
+* % (automatic variable): Automatic Variables. (line 37)
+* %D (automatic variable): Automatic Variables. (line 129)
+* %F (automatic variable): Automatic Variables. (line 130)
+* * (automatic variable): Automatic Variables. (line 73)
+* * (automatic variable), unsupported bizarre usage: Missing. (line 44)
+* *D (automatic variable): Automatic Variables. (line 124)
+* *F (automatic variable): Automatic Variables. (line 125)
+* + (automatic variable): Automatic Variables. (line 63)
+* +D (automatic variable): Automatic Variables. (line 147)
+* +F (automatic variable): Automatic Variables. (line 148)
+* -load: load Directive. (line 65)
+* .DEFAULT: Special Targets. (line 22)
+* .DEFAULT <1>: Last Resort. (line 23)
+* .DEFAULT, and empty recipes: Empty Recipes. (line 16)
+* .DEFAULT_GOAL (define default goal): Special Variables. (line 34)
+* .DELETE_ON_ERROR: Special Targets. (line 70)
+* .DELETE_ON_ERROR <1>: Errors. (line 64)
+* .EXPORT_ALL_VARIABLES: Special Targets. (line 135)
+* .EXPORT_ALL_VARIABLES <1>: Variables/Recursion. (line 99)
+* .FEATURES (list of supported features): Special Variables. (line 121)
+* .IGNORE: Special Targets. (line 77)
+* .IGNORE <1>: Errors. (line 30)
+* .INCLUDE_DIRS (list of include directories): Special Variables.
+ (line 174)
+* .INTERMEDIATE: Special Targets. (line 47)
+* .LIBPATTERNS: Libraries/Search. (line 6)
+* .LOADED: load Directive. (line 62)
+* .LOW_RESOLUTION_TIME: Special Targets. (line 90)
+* .NOTPARALLEL: Special Targets. (line 141)
+* .ONESHELL: Special Targets. (line 149)
+* .ONESHELL <1>: One Shell. (line 6)
+* .PHONY: Phony Targets. (line 22)
+* .PHONY <1>: Special Targets. (line 8)
+* .POSIX: Special Targets. (line 156)
+* .POSIX <1>: Options/Recursion. (line 61)
+* .PRECIOUS: Special Targets. (line 31)
+* .PRECIOUS <1>: Interrupts. (line 22)
+* .RECIPEPREFIX (change the recipe prefix character): Special Variables.
+ (line 99)
+* .SECONDARY: Special Targets. (line 53)
+* .SECONDEXPANSION: Secondary Expansion. (line 6)
+* .SECONDEXPANSION <1>: Special Targets. (line 63)
+* .SHELLFLAGS: Choosing the Shell. (line 6)
+* .SHELLFLAGS <1>: Choosing the Shell. (line 87)
+* .SILENT: Special Targets. (line 121)
+* .SILENT <1>: Echoing. (line 24)
+* .SUFFIXES: Special Targets. (line 16)
+* .SUFFIXES <1>: Suffix Rules. (line 61)
+* .VARIABLES (list of variables): Special Variables. (line 112)
+* /usr/gnu/include: Include. (line 53)
+* /usr/include: Include. (line 53)
+* /usr/local/include: Include. (line 53)
+* < (automatic variable): Automatic Variables. (line 43)
+* <D (automatic variable): Automatic Variables. (line 137)
+* <F (automatic variable): Automatic Variables. (line 138)
+* ? (automatic variable): Automatic Variables. (line 48)
+* ?D (automatic variable): Automatic Variables. (line 153)
+* ?F (automatic variable): Automatic Variables. (line 154)
+* @ (automatic variable): Automatic Variables. (line 30)
+* @D (automatic variable): Automatic Variables. (line 113)
+* @F (automatic variable): Automatic Variables. (line 119)
+* ^ (automatic variable): Automatic Variables. (line 53)
+* ^D (automatic variable): Automatic Variables. (line 142)
+* ^F (automatic variable): Automatic Variables. (line 143)
+* | (automatic variable): Automatic Variables. (line 69)
+* abspath: File Name Functions. (line 120)
+* addprefix: File Name Functions. (line 78)
+* addsuffix: File Name Functions. (line 67)
+* and: Conditional Functions.
+ (line 45)
+* AR: Implicit Variables. (line 40)
+* ARFLAGS: Implicit Variables. (line 113)
+* AS: Implicit Variables. (line 43)
+* ASFLAGS: Implicit Variables. (line 116)
+* basename: File Name Functions. (line 56)
+* bindir: Directory Variables. (line 57)
+* call: Call Function. (line 6)
+* CC: Implicit Variables. (line 46)
+* CFLAGS: Implicit Variables. (line 120)
+* CO: Implicit Variables. (line 66)
+* COFLAGS: Implicit Variables. (line 126)
+* COMSPEC: Choosing the Shell. (line 41)
+* CPP: Implicit Variables. (line 52)
+* CPPFLAGS: Implicit Variables. (line 129)
+* CTANGLE: Implicit Variables. (line 103)
+* 'CURDIR': Recursion. (line 28)
+* CWEAVE: Implicit Variables. (line 97)
+* CXX: Implicit Variables. (line 49)
+* CXXFLAGS: Implicit Variables. (line 123)
+* define: Multi-Line. (line 6)
+* DESTDIR: DESTDIR. (line 6)
+* dir: File Name Functions. (line 16)
+* else: Conditional Syntax. (line 6)
+* endef: Multi-Line. (line 6)
+* endif: Conditional Syntax. (line 6)
+* error: Make Control Functions.
+ (line 11)
+* eval: Eval Function. (line 6)
+* exec_prefix: Directory Variables. (line 39)
+* export: Variables/Recursion. (line 40)
+* FC: Implicit Variables. (line 56)
+* FFLAGS: Implicit Variables. (line 133)
+* file: File Function. (line 6)
+* filter: Text Functions. (line 115)
+* filter-out: Text Functions. (line 133)
+* findstring: Text Functions. (line 104)
+* firstword: Text Functions. (line 185)
+* flavor: Flavor Function. (line 6)
+* foreach: Foreach Function. (line 6)
+* GET: Implicit Variables. (line 69)
+* GFLAGS: Implicit Variables. (line 136)
+* gmk-eval: Guile Interface. (line 18)
+* gmk-expand: Guile Interface. (line 12)
+* gmk_add_function: Loaded Object API. (line 53)
+* gmk_alloc: Loaded Object API. (line 149)
+* gmk_eval: Loaded Object API. (line 123)
+* gmk_expand: Loaded Object API. (line 117)
+* gmk_free: Loaded Object API. (line 154)
+* gmk_func_ptr: Loaded Object API. (line 95)
+* GNUmakefile: Makefile Names. (line 7)
+* GPATH: Search Algorithm. (line 48)
+* guile: Guile Function. (line 6)
+* if: Conditional Functions.
+ (line 6)
+* if <1>: Conditional Functions.
+ (line 12)
+* ifdef: Conditional Syntax. (line 6)
+* ifeq: Conditional Syntax. (line 6)
+* ifndef: Conditional Syntax. (line 6)
+* ifneq: Conditional Syntax. (line 6)
+* include: Include. (line 6)
+* info: Make Control Functions.
+ (line 43)
+* join: File Name Functions. (line 89)
+* lastword: Text Functions. (line 198)
+* LDFLAGS: Implicit Variables. (line 139)
+* LDLIBS: Implicit Variables. (line 144)
+* LEX: Implicit Variables. (line 72)
+* LFLAGS: Implicit Variables. (line 150)
+* libexecdir: Directory Variables. (line 70)
+* LINT: Implicit Variables. (line 80)
+* LINTFLAGS: Implicit Variables. (line 162)
+* load: load Directive. (line 9)
+* LOADLIBES: Implicit Variables. (line 144)
+* M2C: Implicit Variables. (line 60)
+* MAKE: MAKE Variable. (line 6)
+* MAKE <1>: Flavors. (line 88)
+* MAKECMDGOALS: Goals. (line 30)
+* Makefile: Makefile Names. (line 7)
+* makefile: Makefile Names. (line 7)
+* MAKEFILES: MAKEFILES Variable. (line 6)
+* MAKEFILES <1>: Variables/Recursion. (line 126)
+* MAKEFILE_LIST (list of parsed makefiles): Special Variables.
+ (line 8)
+* MAKEFLAGS: Options/Recursion. (line 6)
+* MAKEINFO: Implicit Variables. (line 83)
+* MAKELEVEL: Variables/Recursion. (line 114)
+* MAKELEVEL <1>: Flavors. (line 88)
+* MAKEOVERRIDES: Options/Recursion. (line 50)
+* 'MAKESHELL' (MS-DOS alternative to 'SHELL'): Choosing the Shell.
+ (line 27)
+* MAKE_HOST: Quick Reference. (line 348)
+* MAKE_RESTARTS (number of times 'make' has restarted): Special Variables.
+ (line 73)
+* MAKE_TERMERR (whether stderr is a terminal): Special Variables.
+ (line 80)
+* MAKE_TERMOUT (whether stdout is a terminal): Special Variables.
+ (line 80)
+* MAKE_VERSION: Quick Reference. (line 343)
+* MFLAGS: Options/Recursion. (line 66)
+* notdir: File Name Functions. (line 26)
+* or: Conditional Functions.
+ (line 37)
+* origin: Origin Function. (line 6)
+* OUTPUT_OPTION: Catalogue of Rules. (line 200)
+* override: Override Directive. (line 6)
+* patsubst: Substitution Refs. (line 28)
+* patsubst <1>: Text Functions. (line 18)
+* PC: Implicit Variables. (line 63)
+* PFLAGS: Implicit Variables. (line 156)
+* prefix: Directory Variables. (line 29)
+* private: Suppressing Inheritance.
+ (line 6)
+* realpath: File Name Functions. (line 113)
+* RFLAGS: Implicit Variables. (line 159)
+* RM: Implicit Variables. (line 106)
+* sbindir: Directory Variables. (line 63)
+* SHELL: Choosing the Shell. (line 6)
+* SHELL <1>: Choosing the Shell. (line 88)
+* shell: Shell Function. (line 6)
+* 'SHELL' (recipe execution): Execution. (line 6)
+* sort: Text Functions. (line 147)
+* strip: Text Functions. (line 80)
+* subst: Multiple Targets. (line 28)
+* subst <1>: Text Functions. (line 9)
+* suffix: File Name Functions. (line 42)
+* SUFFIXES: Suffix Rules. (line 81)
+* TANGLE: Implicit Variables. (line 100)
+* TEX: Implicit Variables. (line 87)
+* TEXI2DVI: Implicit Variables. (line 90)
+* undefine: Undefine Directive. (line 6)
+* unexport: Variables/Recursion. (line 45)
+* value: Value Function. (line 6)
+* VPATH: Directory Search. (line 6)
+* VPATH <1>: General Search. (line 6)
+* vpath: Directory Search. (line 6)
+* vpath <1>: Selective Search. (line 6)
+* warning: Make Control Functions.
+ (line 35)
+* WEAVE: Implicit Variables. (line 94)
+* wildcard: Wildcard Function. (line 6)
+* wildcard <1>: File Name Functions. (line 106)
+* word: Text Functions. (line 159)
+* wordlist: Text Functions. (line 168)
+* words: Text Functions. (line 180)
+* YACC: Implicit Variables. (line 76)
+* YFLAGS: Implicit Variables. (line 153)
+