| This is make.info, produced by makeinfo version 6.5 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.74, last updated 21 May 2016, of 'The GNU Make |
| Manual', for GNU 'make' version 4.2.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, 2015, 2016 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: Integrating make, 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: Integrating make, Next: Features, Prev: Extending make, Up: Top |
| |
| 13 Integrating GNU 'make' |
| ************************* |
| |
| GNU 'make' is often one component in a larger system of tools, including |
| integrated development environments, compiler toolchains, and others. |
| The role of 'make' is to start commands and determine whether they |
| succeeded or not: no special integration is needed to accomplish that. |
| However, sometimes it is convenient to bind 'make' more tightly with |
| other parts of the system, both higher-level (tools that invoke 'make') |
| and lower-level (tools that 'make' invokes). |
| |
| * Menu: |
| |
| * Job Slots:: Share job slots with GNU 'make'. |
| * Terminal Output:: Control output to terminals. |
| |
| |
| File: make.info, Node: Job Slots, Next: Terminal Output, Prev: Integrating make, Up: Integrating make |
| |
| 13.1 Sharing Job Slots with GNU 'make' |
| ====================================== |
| |
| GNU 'make' has the ability to run multiple recipes in parallel (*note |
| Parallel Execution: Parallel.) and to cap the total number of parallel |
| jobs even across recursive invocations of 'make' (*note Communicating |
| Options to a Sub-'make': Options/Recursion.). Tools that 'make' invokes |
| which are also able to run multiple operations in parallel, either using |
| multiple threads or multiple processes, can be enhanced to participate |
| in GNU 'make''s job management facility to ensure that the total number |
| of active threads/processes running on the system does not exceed the |
| maximum number of slots provided to GNU 'make'. |
| |
| GNU 'make' uses a method called the "jobserver" to control the number |
| of active jobs across recursive invocations. The actual implementation |
| of the jobserver varies across different operating systems, but some |
| fundamental aspects are always true. |
| |
| First, only command lines that 'make' understands to be recursive |
| invocations of 'make' (*note How the 'MAKE' Variable Works: MAKE |
| Variable.) will have access to the jobserver. When writing makefiles |
| you must be sure to mark the command as recursive (most commonly by |
| prefixing the command line with the '+' indicator (*note Recursive Use |
| of 'make': Recursion.). |
| |
| Second, 'make' will provide information necessary for accessing the |
| jobserver through the environment to its children, in the 'MAKEFLAGS' |
| environment variable. Tools which want to participate in the jobserver |
| protocol will need to parse this environment variable, as described in |
| subsequent sections. |
| |
| Third, every command 'make' starts has one implicit job slot reserved |
| for it before it starts. Any tool which wants to participate in the |
| jobserver protocol should assume it can always run one job without |
| having to contact the jobserver at all. |
| |
| Finally, it's critical that tools that participate in the jobserver |
| protocol return the exact number of slots they obtained from the |
| jobserver back to the jobserver before they exit, even under error |
| conditions. Remember that the implicit job slot should *not* be |
| returned to the jobserver! Returning too few slots means that those |
| slots will be lost for the rest of the build process; returning too many |
| slots means that extra slots will be available. The top-level 'make' |
| command will print an error message at the end of the build if it |
| detects an incorrect number of slots available in the jobserver. |
| |
| As an example, suppose you are implementing a linker which provides |
| for multithreaded operation. You would like to enhance the linker so |
| that if it is invoked by GNU 'make' it can participate in the jobserver |
| protocol to control how many threads are used during link. First you |
| will need to modify the linker to determine if the 'MAKEFLAGS' |
| environment variable is set. Next you will need to parse the value of |
| that variable to determine if the jobserver is available, and how to |
| access it. If it is available then you can access it to obtain job |
| slots controlling how much parallelism your tool can use. Once done |
| your tool must return those job slots back to the jobserver. |
| |
| * Menu: |
| |
| * POSIX Jobserver:: Using the jobserver on POSIX systems. |
| * Windows Jobserver:: Using the jobserver on Windows systems. |
| |
| |
| File: make.info, Node: POSIX Jobserver, Next: Windows Jobserver, Prev: Job Slots, Up: Job Slots |
| |
| 13.1.1 POSIX Jobserver Interaction |
| ---------------------------------- |
| |
| On POSIX systems the jobserver is implemented as a simple UNIX pipe. |
| The pipe will be pre-loaded with one single-character token for each |
| available job. To obtain an extra slot you must read a single character |
| from the jobserver pipe; to release a slot you must write a single |
| character back into the jobserver pipe. |
| |
| To access the pipe you must parse the 'MAKEFLAGS' variable and look |
| for the argument string '--jobserver-auth=R,W' where 'R' and 'W' are |
| non-negative integers representing file descriptors: 'R' is the read |
| file descriptor and 'W' is the write file descriptor. |
| |
| It's important that when you release the job slot, you write back the |
| same character you read from the pipe for that slot. Don't assume that |
| all tokens are the same character; different characters may have |
| different meanings to GNU 'make'. The order is not important, since |
| 'make' has no idea in what order jobs will complete anyway. |
| |
| There are various error conditions you must consider to ensure your |
| implementation is robust: |
| |
| * Usually you will have a command-line argument controlling the |
| parallel operation of your tool. Consider whether your tool should |
| detect situations where both the jobserver and the command-line |
| argument are specified, and how it should react. |
| |
| * If your tool determines that the '--jobserver-auth' option is |
| available in 'MAKEFLAGS' but that the file descriptors specified |
| are closed, this means that the calling 'make' process did not |
| think that your tool was a recursive 'make' invocation (e.g., the |
| command line was not prefixed with a '+' character). You should |
| notify your users of this situation. |
| |
| * Your tool should also examine the first word of the 'MAKEFLAGS' |
| variable and look for the character 'n'. If this character is |
| present then 'make' was invoked with the '-n' option and your tool |
| should stop without performing any operations. |
| |
| * Your tool should be sure to write back the tokens it read, even |
| under error conditions. This includes not only errors in your tool |
| but also outside influences such as interrupts ('SIGINT'), etc. |
| You may want to install signal handlers to manage this write-back. |
| |
| |
| File: make.info, Node: Windows Jobserver, Prev: POSIX Jobserver, Up: Job Slots |
| |
| 13.1.2 Windows Jobserver Interaction |
| ------------------------------------ |
| |
| On Windows systems the jobserver is implemented as a named semaphore. |
| The semaphore will be set with an initial count equal to the number of |
| available slots; to obtain a slot you must wait on the semaphore (with |
| or without a timeout). To release a slot, release the semaphore. |
| |
| To access the semaphore you must parse the 'MAKEFLAGS' variable and |
| look for the argument string '--jobserver-auth=NAME' where 'NAME' is the |
| name of the named semaphore. Use this name with 'OpenSemaphore' to |
| create a handle to the semaphore. |
| |
| There are various error conditions you must consider to ensure your |
| implementation is robust: |
| |
| * Usually you will have a command-line argument controlling the |
| parallel operation of your tool. Consider whether your tool should |
| detect situations where both the jobserver and the command-line |
| argument are specified, and how it should react. |
| |
| * Your tool should be sure to release the semaphore for the tokens it |
| read, even under error conditions. This includes not only errors |
| in your tool but also outside influences such as interrupts |
| ('SIGINT'), etc. You may want to install signal handlers to manage |
| this write-back. |
| |
| |
| File: make.info, Node: Terminal Output, Prev: Job Slots, Up: Integrating make |
| |
| 13.2 Synchronized Terminal Output |
| ================================= |
| |
| Normally GNU 'make' will invoke all commands with access to the same |
| standard and error outputs that 'make' itself was started with. A |
| number of tools will detect whether the output is a terminal or |
| not-a-terminal, and use this information to change the output style. |
| For example if the output goes to a terminal the tool may add control |
| characters that set color, or even change the location of the cursor. |
| If the output is not going to a terminal then these special control |
| characters are not emitted so that they don't corrupt log files, etc. |
| |
| The '--output-sync' (*note Output During Parallel Output: Parallel |
| Output.) option will defeat the terminal detection. When output |
| synchronization is enabled GNU 'make' arranges for all command output to |
| be written to a file, so that its output can be written as a block |
| without interference from other commands. This means that all tools |
| invoked by 'make' will believe that their output is not going to be |
| displayed on a terminal, even when it will be (because 'make' will |
| display it there after the command is completed). |
| |
| In order to facilitate tools which would like to determine whether or |
| not their output will be displayed on a terminal, GNU 'make' will set |
| the 'MAKE_TERMOUT' and 'MAKE_TERMERR' environment variables before |
| invoking any commands. Tools which would like to determine whether |
| standard or error output (respectively) will be displayed on a terminal |
| can check these environment variables to determine if they exist and |
| contain a non-empty value. If so the tool can assume that the output |
| will (eventually) be displayed on a terminal. If the variables are not |
| set or have an empty value, then the tool should fall back to its normal |
| methods of detecting whether output is going to a terminal or not. |
| |
| The content of the variables can be parsed to determine the type of |
| terminal which will be used to display the output. |
| |
| Similarly, environments which invoke 'make' and would like to capture |
| the output and eventually display it on a terminal (or some display |
| which can interpret terminal control characters) can set these variables |
| before invoking 'make'. GNU 'make' will not modify these environment |
| variables if they already exist when it starts. |
| |
| |
| File: make.info, Node: Features, Next: Missing, Prev: Integrating make, Up: Top |
| |
| 14 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 |
| |
| 15 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 |
| |
| 16 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 |
| |
| 16.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 |
| |
| 16.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 |
| |
| 16.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 |
| |
| 16.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 |
| |
| 16.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 |
| |
| 16.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 |
| |
| 16.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 absolute 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 |
| |
| * Menu: |
| |
| * GNU Free Documentation License:: |
| |
| |
| 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. |
| <https://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 |
| <https://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 |
| ***************** |
| |
| [index] |
| * 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, reading from: File Function. (line 6) |
| * 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) |
| * job slots, sharing: Job Slots. (line 6) |
| * jobs, limiting based on load: Parallel. (line 35) |
| * jobserver: Job Slots. (line 16) |
| * jobserver on POSIX: POSIX Jobserver. (line 6) |
| * jobserver on Windows: Windows Jobserver. (line 6) |
| * 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 integration: Integrating 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) |
| * parallel output to terminal: Terminal Output. (line 6) |
| * 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 from a file: File Function. (line 6) |
| * 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) |
| * terminal, output to: Terminal Output. (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) |
| * tools, sharing job slots: Job Slots. (line 6) |
| * 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 <2>: 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 |
| ******************************************* |
| |
| [index] |
| * 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) |
| * .SHELLSTATUS: Shell Function. (line 25) |
| * .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) |
| |