Annotation of researchv10dc/man/adm/man1/make.1, revision 1.1.1.1

1.1       root        1: .TH MAKE 1
                      2: .CT 1 prog_c writing_troff prog_other
                      3: .SH NAME
                      4: make \(mi maintain collections of programs
                      5: .SH SYNOPSIS
                      6: .B make
                      7: [
                      8: .B -f
                      9: .I makefile
                     10: ]
                     11: [
                     12: .I option ...
                     13: ]
                     14: [
                     15: .I name ...
                     16: ]
                     17: .SH DESCRIPTION
                     18: .I Make
                     19: executes recipes in
                     20: .I makefile
                     21: to update the target
                     22: .IR names
                     23: (usually programs).
                     24: If no target is specified, the targets of the first rule in
                     25: .I makefile
                     26: are updated.
                     27: If no
                     28: .B -f
                     29: option is present,
                     30: .L makefile
                     31: and
                     32: .L Makefile
                     33: are tried in order.
                     34: If
                     35: .I makefile
                     36: is 
                     37: .LR - ,
                     38: the standard input is taken.
                     39: More than one
                     40: .B -f
                     41: option may appear.
                     42: .PP
                     43: .I Make
                     44: updates a target if it depends on prerequisite files
                     45: that have been modified since the target was last modified,
                     46: or if the target does not exist.
                     47: The prerequisites are updated before the target.
                     48: .PP
                     49: The makefile
                     50: comprises a sequence of rules and macro definitions.
                     51: The first line of a rule is a
                     52: blank-separated list of targets, then a single or double colon,
                     53: then a list of prerequisite files terminated by semicolon or newline.
                     54: Text following a semicolon, and all following lines
                     55: that begin with a tab, are shell commands:
                     56: the recipe for updating the target.
                     57: .PP
                     58: If a name appears as target in more than one single-colon rule, it depends
                     59: on all of the prerequisites of those rules, but only
                     60: one recipe may be specified among the rules.
                     61: A target in a double-colon rule is updated by the following
                     62: recipe only if it is out of date with respect to the
                     63: prerequisites of that rule.
                     64: .PP
                     65: Two special forms of name are recognized.
                     66: A name like
                     67: .IR a ( b )
                     68: means the file named
                     69: .I b
                     70: stored in the archive named
                     71: .I a.
                     72: A name like
                     73: .IR a (( b ))
                     74: means the file stored in archive
                     75: .I a
                     76: and containing the entry point
                     77: .I b.
                     78: .PP
                     79: Sharp and newline surround comments.
                     80: .PP
                     81: In this makefile
                     82: .L pgm
                     83: depends on two
                     84: files
                     85: .L a.o
                     86: and
                     87: .LR b.o ,
                     88: and they in turn depend on
                     89: .L .c
                     90: files and a common file
                     91: .LR ab.h :
                     92: .PP
                     93: .EX
                     94: pgm: a.o b.o
                     95:        cc a.o b.o -lplot -o pgm
                     96: .EE
                     97: .PP
                     98: .EX
                     99: a.o: ab.h a.c
                    100:        cc -c a.c
                    101: .EE
                    102: .PP
                    103: .EX
                    104: b.o: ab.h b.c
                    105:        cc -c b.c
                    106: .EE
                    107: .PP
                    108: Makefile lines of the form
                    109: .IP
                    110: .IB "string1 " = " string2"
                    111: .LP
                    112: are macro definitions.
                    113: Subsequent appearances of
                    114: .BI $( string1 )
                    115: are replaced by
                    116: .IR string2 .
                    117: If
                    118: .I string1
                    119: is a single character, the parentheses are optional;
                    120: .B $$
                    121: is replaced by
                    122: .BR $ .
                    123: Each entry in the environment (see
                    124: .IR sh (1))
                    125: of the
                    126: .I make
                    127: command is taken as a macro definition,
                    128: as are command arguments with embedded equal signs.
                    129: .PP
                    130: Lines of the form
                    131: .IB "string1 " := " string2"
                    132: occurring in a recipe are assignments: macro definitions
                    133: that are made in the course of executing the recipe.
                    134: .PP
                    135: A target containing a single 
                    136: .B %
                    137: introduces a pattern rule,
                    138: which controls the making of names that do not occur
                    139: explicitly as targets.
                    140: The 
                    141: .B %
                    142: matches an arbitrary string called the stem:
                    143: .IB A % B
                    144: matches any string that begins with
                    145: .I A
                    146: and ends with
                    147: .I B.
                    148: A 
                    149: .B %
                    150: in a prerequisite name stands for the stem;
                    151: and the special macro
                    152: .B $%
                    153: stands for the stem in the recipe.
                    154: A name that has no explicit recipe is
                    155: matched against the target of each pattern rule.
                    156: The first pattern rule for which the prerequisites exist
                    157: specifies
                    158: further dependencies.
                    159: .PP
                    160: The following pattern rule maintains an object library where all the C source files
                    161: share a common include file
                    162: .LR defs.h .
                    163: .PP
                    164: .EX
                    165: arch.a(%.o) : %.c defs.h
                    166:        cc -c $%.c
                    167:        ar r arch.a $%.o
                    168:        rm $%.o
                    169: .EE
                    170: .PP
                    171: A set of default pattern rules is built in, and effectively
                    172: follows the user's list of rules.
                    173: Assuming these rules,
                    174: which tell, among other things, how to make
                    175: .B .o
                    176: files from
                    177: .B .c
                    178: files, the first example becomes:
                    179: .PP
                    180: .EX
                    181: pgm: a.o b.o
                    182:        cc a.o b.o -lplot -o pgm
                    183: .EE
                    184: .PP
                    185: .EX
                    186: a.o b.o: ab.h
                    187: .EE
                    188: .PP
                    189: Here, greatly simplified, is a sample of the built-in rules:
                    190: .PP
                    191: .EX
                    192:  CC = cc
                    193:  %.o: %.c
                    194:        $(CC) $(CFLAGS) -c $%.c
                    195:  %.o: %.f
                    196:        f77 $(FFLAGS) -c $%.f
                    197:  % : %.c
                    198:        $(CC) $(CFLAGS) -o $% $%.c
                    199: .EE
                    200: .PP
                    201: The first rule
                    202: says that a name ending in
                    203: .B .o
                    204: could be made
                    205: if a matching name ending in
                    206: .B .c
                    207: were present.
                    208: The second states a similar rule for files ending in
                    209: .BR .f .
                    210: The third says that an arbitrary name can be made
                    211: by compiling a file with that name suffixed by
                    212: .BR .c .
                    213: .PP
                    214: Macros make the builtin pattern rules flexible:
                    215: .B CC
                    216: names the particular C compiler,
                    217: .B CFLAGS
                    218: gives
                    219: .IR cc (1)
                    220: options,
                    221: .B FFLAGS
                    222: for
                    223: .IR f77 (1),
                    224: .B LFLAGS
                    225: for
                    226: .IR lex (1),
                    227: .B YFLAGS
                    228: for
                    229: .IR yacc (1),
                    230: and
                    231: .B PFLAGS
                    232: for
                    233: .IR pascal (A).
                    234: .PP
                    235: An older, now disparaged, means of specifying default rules
                    236: is based only on suffixes.
                    237: Prerequisites are inferred according to selected suffixes
                    238: listed as the `prerequisites' for the special name
                    239: .BR .SUFFIXES ;
                    240: multiple lists accumulate;
                    241: an empty list clears what came before.
                    242: .PP
                    243: The rule to create a file with suffix
                    244: .I s2
                    245: that depends on a similarly named file with suffix
                    246: .I s1
                    247: is specified as an entry
                    248: for the `target'
                    249: .IR s1s2 .
                    250: Order is significant; the first possible name for which both
                    251: a file and a rule exist
                    252: is inferred.
                    253: An old style rule for making
                    254: optimized
                    255: .B .o
                    256: files from
                    257: .B .c
                    258: files is
                    259: .PP
                    260: .EX
                    261: \&.SUFFIXES: .c .o
                    262: \&.c.o: ; cc -c -O -o $@ $*.c
                    263: .EE
                    264: .PP
                    265: The following two macros are defined for use in any rule:
                    266: .TP
                    267: .B $($@)
                    268: full name of target
                    269: .PD0
                    270: .TP
                    271: .B $($/)
                    272: target name beginning at the last slash, if any
                    273: .PD
                    274: .LP
                    275: A number of other special macros are defined
                    276: automatically in rules invoked by one of the implicit mechanisms:
                    277: .TP
                    278: .B $*
                    279: target name with suffix deleted
                    280: .PD0
                    281: .TP
                    282: .B $@
                    283: full target name
                    284: .TP
                    285: .B $<
                    286: list of prerequisites in an implicit rule
                    287: .TP
                    288: .B $?
                    289: list of prerequisites that are out of date
                    290: .TP
                    291: .B $^
                    292: list of all prerequisites
                    293: .PD
                    294: .PP
                    295: The following are included for consistency with System V:
                    296: .TP
                    297: .B $(@D)
                    298: directory part of 
                    299: .B $@
                    300: (up to last slash)
                    301: .PD0
                    302: .TP
                    303: .B $(@F)
                    304: file name part of 
                    305: .B $@
                    306: (after last slash)
                    307: .TP
                    308: .B $(*D)
                    309: directory part of 
                    310: .B $*
                    311: (up to last slash)
                    312: .TP
                    313: .B $(*F)
                    314: file name part of 
                    315: .B $*
                    316: (after last slash)
                    317: .TP
                    318: .B $(<D)
                    319: directory part of 
                    320: .B $<
                    321: (up to last slash)
                    322: .TP
                    323: .B $(<F)
                    324: file name part of 
                    325: .B $<
                    326: (after last slash)
                    327: .PD
                    328: .PP
                    329: Recipe lines are executed one at a time, each by its
                    330: own shell.
                    331: A line is printed when it is executed unless
                    332: the special target
                    333: .B .SILENT
                    334: is in the makefile,
                    335: or the first character of the command is 
                    336: .BR @ .
                    337: .PP
                    338: Commands that return nonzero status 
                    339: cause
                    340: .I make
                    341: to terminate unless
                    342: the special target
                    343: .B .IGNORE
                    344: is in the makefile
                    345: or the command begins with
                    346: <tab><hyphen>.
                    347: .PP
                    348: Interrupt and quit cause the target to be deleted
                    349: unless the target depends on the special name
                    350: .BR .PRECIOUS .
                    351: .PP
                    352: .I Make
                    353: includes a rudimentary parallel processing ability.
                    354: If the separation string is
                    355: .B :&
                    356: or
                    357: .B ::& ,
                    358: .I make
                    359: can run the command sequences to create the prerequisites
                    360: simultaneously.
                    361: If two names are separated by an ampersand on the right side
                    362: of a colon, those two may be created in parallel.
                    363: .PP
                    364: Other options:
                    365: .TP
                    366: .B -i
                    367: Equivalent to the special entry
                    368: .L .IGNORE: .
                    369: .TP
                    370: .B -k
                    371: When a command returns nonzero status,
                    372: abandon work on the current entry, but
                    373: continue on branches that do not depend on the current entry.
                    374: .TP
                    375: .B -n
                    376: Trace and print, but do not execute the commands
                    377: needed to update the targets.
                    378: .TP
                    379: .B -t
                    380: Touch, i.e. update the modified date of targets, without
                    381: executing any commands.
                    382: .TP
                    383: .B -r
                    384: Turn off built-in rules.
                    385: .TP
                    386: .B -s
                    387: Equivalent to the special entry
                    388: .BR .SILENT: .
                    389: .TP
                    390: .B -e
                    391: Environment definitions override conflicting definitions in arguments
                    392: or in makefiles.
                    393: Ordinary precedence is argument over makefile
                    394: over environment.
                    395: .TP
                    396: .B -o
                    397: Assume old style default suffix list:
                    398: .L
                    399: \&.SUFFIXES: .out .o .c .e .r .f .y .l .s .p
                    400: .TP
                    401: .BI -P n
                    402: Permit
                    403: .I n
                    404: command sequences to be done in parallel with 
                    405: .BR & .
                    406: .TP
                    407: .B -z
                    408: Run commands by passing them to the shell;
                    409: normally simple commands are run directly by
                    410: .IR exec (2).
                    411: .SH FILES
                    412: .F makefile
                    413: .br
                    414: .F Makefile
                    415: .SH "SEE ALSO"
                    416: .IR sh (1),
                    417: .I touch
                    418: in
                    419: .IR chdate (1),
                    420: .IR ar (1),
                    421: .IR mk (1)
                    422: .SH BUGS
                    423: Comments can't appear on recipe lines.
                    424: .br
                    425: Archive entries are not handled reliably.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.