home *** CD-ROM | disk | FTP | other *** search
- .so an
- .de HP
- .ti -5
- .en
- .TH MAKE 1 "AMIGA Programmer's Manual"
- .SH NAME
- make - maintain program groups
- .SH SYNTAX
- make [ -f makefile ] [ option ] ... file ...
- .SH DESCRIPTION
- .I Make
- executes commands in
- .I makefile
- to update one or more target
- .I names. Name
- is typically a program. If no -f option
- is present, `makefile' and `Makefile' are tried in order.
- If
- .I makefile
- is `-', the standard input is taken. More than one -f option may appear.
-
- .I Make
- updates a target if it depends on prerequisite files that have been
- modified since the target was last modified, or if the target does not
- exist.
-
- .I Makefile
- contains a sequence of entries that specify dependencies. The first line of
- an entry is a blank-separated list of targets, then a colon, then a list of
- prerequisite files. Text following a semicolon, and all following lines
- that begin with a tab, are shell commands to be executed to update the
- target. If a name appears on the left of more than one `colon' line, then
- it depends on all of the names on the right of the colon on those lines,
- but only one command sequence may be specified for it. If a name appears on
- a line with a double colon :: then the command sequence following that line
- is performed only if the name is out of date with respect to the names to
- the right of the double colon, and is not affected by other double colon
- lines on which that name may appear.
-
- Two special forms of a name are recognized. A name like
- .I a(b)
- means the file named
- .I b
- stored in the archive named
- .I a.
- A name like
- .I a((b))
- means the file stored in archive a containing the entry point
- .I b.
-
- Sharp and newline surround comments.
-
- The following makefile says that `pgm' depends on two files `a.o' and
- `b.o', and that they in turn depend on `.c' files and a common file `incl'.
-
- pgm: a.o b.o
- cc a.o b.o -lm -o pgm
- a.o: incl a.c
- cc -c a.c
- b.o: incl b.c
- cc -c b.c
-
- .I Makefile
- entries of the form
-
- string1 = string2
-
- are macro definitions. Subsequent appearances of
- .I $(string1)
- or
- .I ${string1}
- are replaced by
- .I string2.
- If
- .I string1
- is a single character, the parentheses or braces are optional.
-
- .I Make
- infers prerequisites for files for which
- .I makefile
- gives no construction commands. For example, a `.c' file may be inferred as
- prerequisite for a `.o' file and be compiled to produce the `.o' file. Thus
- the preceding example can be done more briefly:
-
- pgm: a.o b.o
- cc a.o b.o -lm -o pgm
- a.o b.o: incl
-
- Prerequisites are inferred according to selected suffixes listed as the
- `prerequisites' for the special name `.SUFFIXES'; multiple lists
- accumulate; an empty list clears what came before. Order is significant;
- the first possible name for which both a file and a rule as described in
- the next paragraph exist is inferred. The default list is
-
- .SUFFIXES: .out .o .c .e .r .f .y .l .s .p
-
- The rule to create a file with suffix
- .I s2
- that depends on a similarly named file with suffix
- .I s1
- is specified as an entry for the `target'
- .I s1s2.
- In such an entry, the special macro $* stands for the target name with
- suffix deleted, $@@ for the full target name, $< for the complete list of
- prerequisites, and $? for the list of prerequisites that are out of date.
- For example, a rule for making optimized `.o' files from `.c' files is
-
- .c.o: ; cc -c -O -o $@@ $*.c
-
- Certain macros are used by the default inference rules to communicate
- optional arguments to any resulting compilations. In particular, `CFLAGS'
- is used for
- .I cc(1)
- options, `FFLAGS' for
- .I f77(1)
- options, `PFLAGS' for
- .I pc(1)
- options, and `LFLAGS' and `YFLAGS' for
- .I lex
- and
- .I yacc(1)
- options. In addition, the macro `MFLAGS' is filled in with the initial
- command line options supplied to
- .I make.
- This simplifies maintaining a hierarchy of makefiles as one may then invoke
- .I make
- on makefiles in subdirectories and pass along useful options such as -k.
-
- Command lines are executed one at a time, each by its own shell. A line is
- printed when it is executed unless the special target `.SILENT' is in
- .I makefile,
- or the first character of the command is `@@'.
-
- Commands returning nonzero status (see
- .I intro(1))
- cause
- .I make
- to terminate unless the special target `.IGNORE' is in
- .I makefile
- or the command begins with <tab><hyphen>.
-
- Interrupt and quit cause the target to be deleted unless the target is a
- directory or depends on the special name `.PRECIOUS'.
-
- Other options:
-
- .RS +5
- .HP
- -i@tEquivalent to the special entry `.IGNORE:'.
-
- .HP
- -k@tWhen a command returns nonzero status, abandon work on the current
- entry, but continue on branches that do not depend on the current entry.
-
- .HP
- -n@tTrace and print, but do not execute the commands needed to update the
- targets.
-
- .HP
- -t@tTouch, i.e. update the modified date of targets, without executing any
- commands.
-
- .HP
- -r@tEquivalent to an initial special entry `.SUFFIXES:' with no list.
-
- .HP
- -s@tEquivalent to the special entry `.SILENT:'.
-
- .HP
- -q@tQuestion up-to-dateness of target. Return exit status 1 if not;
- otherwise, return 0.
-
- .HP
- -r@tDon't use built-in rules.
- .RE
- .SH FILES
- makefile, Makefile
- .SH "SEE ALSO"
- sh(1), touch(1), f77(1), pc(1)
- .br
- S. I. Feldman
- .I "Make - A Program for Maintaining Computer Programs"
- .SH BUGS
- Some commands return nonzero status inappropriately. Use -i
- to overcome the difficulty.
- Commands that are directly executed by the shell, notably
- .I cd(1),
- are ineffectual across newlines in
- .I make.
- .SH "AMIGA VERSION"
- Not all of the above applies to the Amiga version of
- .I make.
- In particular, the default rules and suffixes are different.
-
- Omissions:
- .br
- Libraries and the related notation are not implemented.
- .br
- The -k option is not supported.
- .br
- The `;' construct is not implemented.
- .br
- The remarks related to
- .I MFLAGS, lex(1), yacc(1), f77(1)
- and
- .I pc(1)
- do not apply.
- .br
- $< and $? are not exactly as specified: $< is ONE prerequisite that is out
- of date (including path name), and $? is ALL prerequisites (without path
- names).
-
- Additions:
- .br
- If a file
- .I s:builtins.make
- exists, this file is used instead of the built-in rules.
- .br
- Filenames are not case-significant. Unfortunately, this also applies to the
- special target names .PRECIOUS, .IGNORE and .SILENT. These can also be
- specified as .Precious, or .iGnOrE.
- .br
- .I Cd
- commands are effective.
- .br
- Comment characters (#) may be escaped with a backslash (\).
- .br
- At most 1 colon is allowed in a target file name (for including device
- names). In that case, the trailing colon must follow the target name
- immediately, without any intervening white space. Spaces in the names are
- not allowed.
- .br
- A new special target name has been added:
- .it "@.PATH.
- Any prerequisite names for
- .it "@.PATH
- are used for finding source files for implicit rules. You name one or more
- directories, and if the source file for an implicit rule cannot be found
- in the current directory, each of the the given pathnames is prepended (in
- the order given) to the source name, until the file is found.
-
- For instance, the Makefile
-
- .PATH: src/ include/ src/old
-
- pgm: pgm.o
-
- will look (according to the .c.o rule) for pgm.c, src/pgm.c, include/pgm.c
- and src/oldpgm.c, in that order. Of course, due to other implicit rules,
- other files (with other suffixes) may be tried as well.
-