Annotation of researchv10dc/man/adm/man1/make.1, revision 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.