summaryrefslogtreecommitdiff
path: root/static/v10/man1/make.1
diff options
context:
space:
mode:
Diffstat (limited to 'static/v10/man1/make.1')
-rw-r--r--static/v10/man1/make.1425
1 files changed, 425 insertions, 0 deletions
diff --git a/static/v10/man1/make.1 b/static/v10/man1/make.1
new file mode 100644
index 00000000..66b14bda
--- /dev/null
+++ b/static/v10/man1/make.1
@@ -0,0 +1,425 @@
+.TH MAKE 1
+.CT 1 prog_c writing_troff prog_other
+.SH NAME
+make \(mi maintain collections of programs
+.SH SYNOPSIS
+.B make
+[
+.B -f
+.I makefile
+]
+[
+.I option ...
+]
+[
+.I name ...
+]
+.SH DESCRIPTION
+.I Make
+executes recipes in
+.I makefile
+to update the target
+.IR names
+(usually programs).
+If no target is specified, the targets of the first rule in
+.I makefile
+are updated.
+If no
+.B -f
+option is present,
+.L makefile
+and
+.L Makefile
+are tried in order.
+If
+.I makefile
+is
+.LR - ,
+the standard input is taken.
+More than one
+.B -f
+option may appear.
+.PP
+.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.
+The prerequisites are updated before the target.
+.PP
+The makefile
+comprises a sequence of rules and macro definitions.
+The first line of a rule is a
+blank-separated list of targets, then a single or double colon,
+then a list of prerequisite files terminated by semicolon or newline.
+Text following a semicolon, and all following lines
+that begin with a tab, are shell commands:
+the recipe for updating the target.
+.PP
+If a name appears as target in more than one single-colon rule, it depends
+on all of the prerequisites of those rules, but only
+one recipe may be specified among the rules.
+A target in a double-colon rule is updated by the following
+recipe only if it is out of date with respect to the
+prerequisites of that rule.
+.PP
+Two special forms of name are recognized.
+A name like
+.IR a ( b )
+means the file named
+.I b
+stored in the archive named
+.I a.
+A name like
+.IR a (( b ))
+means the file stored in archive
+.I a
+and containing the entry point
+.I b.
+.PP
+Sharp and newline surround comments.
+.PP
+In this makefile
+.L pgm
+depends on two
+files
+.L a.o
+and
+.LR b.o ,
+and they in turn depend on
+.L .c
+files and a common file
+.LR ab.h :
+.PP
+.EX
+pgm: a.o b.o
+ cc a.o b.o -lplot -o pgm
+.EE
+.PP
+.EX
+a.o: ab.h a.c
+ cc -c a.c
+.EE
+.PP
+.EX
+b.o: ab.h b.c
+ cc -c b.c
+.EE
+.PP
+Makefile lines of the form
+.IP
+.IB "string1 " = " string2"
+.LP
+are macro definitions.
+Subsequent appearances of
+.BI $( string1 )
+are replaced by
+.IR string2 .
+If
+.I string1
+is a single character, the parentheses are optional;
+.B $$
+is replaced by
+.BR $ .
+Each entry in the environment (see
+.IR sh (1))
+of the
+.I make
+command is taken as a macro definition,
+as are command arguments with embedded equal signs.
+.PP
+Lines of the form
+.IB "string1 " := " string2"
+occurring in a recipe are assignments: macro definitions
+that are made in the course of executing the recipe.
+.PP
+A target containing a single
+.B %
+introduces a pattern rule,
+which controls the making of names that do not occur
+explicitly as targets.
+The
+.B %
+matches an arbitrary string called the stem:
+.IB A % B
+matches any string that begins with
+.I A
+and ends with
+.I B.
+A
+.B %
+in a prerequisite name stands for the stem;
+and the special macro
+.B $%
+stands for the stem in the recipe.
+A name that has no explicit recipe is
+matched against the target of each pattern rule.
+The first pattern rule for which the prerequisites exist
+specifies
+further dependencies.
+.PP
+The following pattern rule maintains an object library where all the C source files
+share a common include file
+.LR defs.h .
+.PP
+.EX
+arch.a(%.o) : %.c defs.h
+ cc -c $%.c
+ ar r arch.a $%.o
+ rm $%.o
+.EE
+.PP
+A set of default pattern rules is built in, and effectively
+follows the user's list of rules.
+Assuming these rules,
+which tell, among other things, how to make
+.B .o
+files from
+.B .c
+files, the first example becomes:
+.PP
+.EX
+pgm: a.o b.o
+ cc a.o b.o -lplot -o pgm
+.EE
+.PP
+.EX
+a.o b.o: ab.h
+.EE
+.PP
+Here, greatly simplified, is a sample of the built-in rules:
+.PP
+.EX
+ CC = cc
+ %.o: %.c
+ $(CC) $(CFLAGS) -c $%.c
+ %.o: %.f
+ f77 $(FFLAGS) -c $%.f
+ % : %.c
+ $(CC) $(CFLAGS) -o $% $%.c
+.EE
+.PP
+The first rule
+says that a name ending in
+.B .o
+could be made
+if a matching name ending in
+.B .c
+were present.
+The second states a similar rule for files ending in
+.BR .f .
+The third says that an arbitrary name can be made
+by compiling a file with that name suffixed by
+.BR .c .
+.PP
+Macros make the builtin pattern rules flexible:
+.B CC
+names the particular C compiler,
+.B CFLAGS
+gives
+.IR cc (1)
+options,
+.B FFLAGS
+for
+.IR f77 (1),
+.B LFLAGS
+for
+.IR lex (1),
+.B YFLAGS
+for
+.IR yacc (1),
+and
+.B PFLAGS
+for
+.IR pascal (A).
+.PP
+An older, now disparaged, means of specifying default rules
+is based only on suffixes.
+Prerequisites are inferred according to selected suffixes
+listed as the `prerequisites' for the special name
+.BR .SUFFIXES ;
+multiple lists accumulate;
+an empty list clears what came before.
+.PP
+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'
+.IR s1s2 .
+Order is significant; the first possible name for which both
+a file and a rule exist
+is inferred.
+An old style rule for making
+optimized
+.B .o
+files from
+.B .c
+files is
+.PP
+.EX
+\&.SUFFIXES: .c .o
+\&.c.o: ; cc -c -O -o $@ $*.c
+.EE
+.PP
+The following two macros are defined for use in any rule:
+.TP
+.B $($@)
+full name of target
+.PD0
+.TP
+.B $($/)
+target name beginning at the last slash, if any
+.PD
+.LP
+A number of other special macros are defined
+automatically in rules invoked by one of the implicit mechanisms:
+.TP
+.B $*
+target name with suffix deleted
+.PD0
+.TP
+.B $@
+full target name
+.TP
+.B $<
+list of prerequisites in an implicit rule
+.TP
+.B $?
+list of prerequisites that are out of date
+.TP
+.B $^
+list of all prerequisites
+.PD
+.PP
+The following are included for consistency with System V:
+.TP
+.B $(@D)
+directory part of
+.B $@
+(up to last slash)
+.PD0
+.TP
+.B $(@F)
+file name part of
+.B $@
+(after last slash)
+.TP
+.B $(*D)
+directory part of
+.B $*
+(up to last slash)
+.TP
+.B $(*F)
+file name part of
+.B $*
+(after last slash)
+.TP
+.B $(<D)
+directory part of
+.B $<
+(up to last slash)
+.TP
+.B $(<F)
+file name part of
+.B $<
+(after last slash)
+.PD
+.PP
+Recipe lines are executed one at a time, each by its
+own shell.
+A line is printed when it is executed unless
+the special target
+.B .SILENT
+is in the makefile,
+or the first character of the command is
+.BR @ .
+.PP
+Commands that return nonzero status
+cause
+.I make
+to terminate unless
+the special target
+.B .IGNORE
+is in the makefile
+or the command begins with
+<tab><hyphen>.
+.PP
+Interrupt and quit cause the target to be deleted
+unless the target depends on the special name
+.BR .PRECIOUS .
+.PP
+.I Make
+includes a rudimentary parallel processing ability.
+If the separation string is
+.B :&
+or
+.B ::& ,
+.I make
+can run the command sequences to create the prerequisites
+simultaneously.
+If two names are separated by an ampersand on the right side
+of a colon, those two may be created in parallel.
+.PP
+Other options:
+.TP
+.B -i
+Equivalent to the special entry
+.L .IGNORE: .
+.TP
+.B -k
+When a command returns nonzero status,
+abandon work on the current entry, but
+continue on branches that do not depend on the current entry.
+.TP
+.B -n
+Trace and print, but do not execute the commands
+needed to update the targets.
+.TP
+.B -t
+Touch, i.e. update the modified date of targets, without
+executing any commands.
+.TP
+.B -r
+Turn off built-in rules.
+.TP
+.B -s
+Equivalent to the special entry
+.BR .SILENT: .
+.TP
+.B -e
+Environment definitions override conflicting definitions in arguments
+or in makefiles.
+Ordinary precedence is argument over makefile
+over environment.
+.TP
+.B -o
+Assume old style default suffix list:
+.L
+\&.SUFFIXES: .out .o .c .e .r .f .y .l .s .p
+.TP
+.BI -P n
+Permit
+.I n
+command sequences to be done in parallel with
+.BR & .
+.TP
+.B -z
+Run commands by passing them to the shell;
+normally simple commands are run directly by
+.IR exec (2).
+.SH FILES
+.F makefile
+.br
+.F Makefile
+.SH "SEE ALSO"
+.IR sh (1),
+.I touch
+in
+.IR chdate (1),
+.IR ar (1),
+.IR mk (1)
+.SH BUGS
+Comments can't appear on recipe lines.
+.br
+Archive entries are not handled reliably.