|
|
1.1 ! root 1: .\" Copyright (c) 1980 Regents of the University of California. ! 2: .\" All rights reserved. The Berkeley software License Agreement ! 3: .\" specifies the terms and conditions for redistribution. ! 4: .\" ! 5: .\" @(#)make.1 6.4 (Berkeley) 8/24/87 ! 6: .\" ! 7: .TH MAKE 1 "August 24, 1987" ! 8: .UC 4 ! 9: .SH NAME ! 10: make \- maintain program groups ! 11: .SH SYNOPSIS ! 12: .B make ! 13: [ ! 14: .B \-f ! 15: makefile ] [ option ] ... ! 16: file ... ! 17: .SH DESCRIPTION ! 18: .I Make ! 19: executes commands in ! 20: .I makefile ! 21: to update ! 22: one or more target ! 23: .IR names . ! 24: .I Name ! 25: is typically a program. ! 26: If no ! 27: .B \-f ! 28: option is present, `makefile' and `Makefile' are ! 29: tried in order. ! 30: If ! 31: .I makefile ! 32: is `\-', the standard input is taken. ! 33: More than one ! 34: .B \-f ! 35: option may appear. ! 36: .PP ! 37: .I Make ! 38: updates a target if it depends on prerequisite files ! 39: that have been modified since the target was last modified, ! 40: or if the target does not exist. ! 41: .PP ! 42: .I Makefile ! 43: contains a sequence of entries that specify dependencies. ! 44: The first line of an entry is a ! 45: blank-separated list of targets, then a colon, ! 46: then a list of prerequisite files. ! 47: Text following a semicolon, and all following lines ! 48: that begin with a tab, are shell commands ! 49: to be executed to update the target. ! 50: If a name appears on the left of more than one `colon' line, then it depends ! 51: on all of the names on the right of the colon on those lines, but only ! 52: one command sequence may be specified for it. ! 53: If a name appears on a line with a double colon ! 54: .B "::" ! 55: then the command sequence following that line is performed ! 56: only if the name is out of date with respect to the names to the right ! 57: of the double colon, and is not affected by other double colon lines ! 58: on which that name may appear. ! 59: .PP ! 60: Two special forms of a name are recognized. ! 61: A name like ! 62: .IR a ( b ) ! 63: means the file named ! 64: .I b ! 65: stored in the archive named ! 66: .I a. ! 67: A name like ! 68: .IR a (( b )) ! 69: means the file stored in archive ! 70: .I a ! 71: containing the entry point ! 72: .I b. ! 73: .PP ! 74: Sharp and newline surround comments. ! 75: .PP ! 76: The following makefile says that `pgm' depends on two ! 77: files `a.o' and `b.o', and that they in turn depend on ! 78: `.c' files and a common file `incl'. ! 79: .RS ! 80: .HP ! 81: .PD 0 ! 82: .nf ! 83: pgm: a.o b.o ! 84: cc a.o b.o \-lm \-o pgm ! 85: .HP ! 86: a.o: incl a.c ! 87: cc \-c a.c ! 88: .HP ! 89: b.o: incl b.c ! 90: cc \-c b.c ! 91: .fi ! 92: .RE ! 93: .PD ! 94: .PP ! 95: .I Makefile ! 96: entries of the form ! 97: .PP ! 98: .IP ! 99: string1 = string2 ! 100: .PP ! 101: are macro definitions. ! 102: Subsequent appearances of ! 103: .RI $( string1 ) ! 104: or ! 105: .RI ${ string1 } ! 106: are replaced by ! 107: .IR string2 . ! 108: If ! 109: .I string1 ! 110: is a single character, the parentheses or braces ! 111: are optional. ! 112: .PP ! 113: .I Make ! 114: infers prerequisites for files for which ! 115: .I makefile ! 116: gives no construction commands. ! 117: For example, a ! 118: `.c' file may be inferred as prerequisite for a `.o' file ! 119: and be compiled to produce the `.o' file. ! 120: Thus the preceding example can be done more briefly: ! 121: .RS ! 122: .HP ! 123: .PD 0 ! 124: .nf ! 125: pgm: a.o b.o ! 126: cc a.o b.o \-lm \-o pgm ! 127: .HP ! 128: a.o b.o: incl ! 129: .fi ! 130: .RE ! 131: .PD ! 132: .PP ! 133: Prerequisites are inferred according to selected suffixes ! 134: listed as the `prerequisites' for the special name `.SUFFIXES'; ! 135: multiple lists accumulate; ! 136: an empty list clears what came before. ! 137: Order is significant; the first possible name for which both ! 138: a file and a rule as described in the next paragraph exist ! 139: is inferred. ! 140: The default list is ! 141: .IP ! 142: \&.SUFFIXES: .out .o .c .e .r .f .y .l .s .p ! 143: .PP ! 144: The rule to create a file with suffix ! 145: .I s2 ! 146: that depends on a similarly named file with suffix ! 147: .I s1 ! 148: is specified as an entry ! 149: for the `target' ! 150: .IR s1s2 . ! 151: In such an entry, the special macro $* stands for ! 152: the target name with suffix deleted, $@ for the full target name, ! 153: $< for the complete list of prerequisites, ! 154: and ! 155: $? for the list of prerequisites that are out of date. ! 156: For example, a rule for making ! 157: optimized `.o' files from `.c' files is ! 158: .IP ! 159: \&.c.o: ; cc \-c \-O \-o $@ $*.c ! 160: .PP ! 161: Certain macros are used by the default inference rules ! 162: to communicate optional arguments to ! 163: any resulting compilations. ! 164: In particular, ! 165: `CFLAGS' is used for ! 166: .IR cc (1) ! 167: options, ! 168: `FFLAGS' for ! 169: .IR f77 (1) ! 170: options, ! 171: `PFLAGS' for ! 172: .IR pc (1) ! 173: options, ! 174: and `LFLAGS' and `YFLAGS' for ! 175: .I lex ! 176: and ! 177: .IR yacc (1) ! 178: options. In addition, the macro `MFLAGS' is filled in ! 179: with the initial command line options supplied to ! 180: .IR make . ! 181: This simplifies maintaining a hierarchy of makefiles as ! 182: one may then invoke ! 183: .I make ! 184: on makefiles in subdirectories and pass along useful options ! 185: such as ! 186: .BR \-k . ! 187: .PP ! 188: The environment is read by \fImake\fP. All variables are assumed to be ! 189: macro definitions and processed as such. The environmental variables ! 190: are processed before any makefile and after the internal rules; thus, ! 191: macro assignments in a makefile override environmental variables. The ! 192: \fB-e\fP option causes the environment to override the macro assignments ! 193: in a makefile. As with macro assignments, environmental variables are ! 194: always overriden by the command line. ! 195: .PP ! 196: Another special macro is `VPATH'. ! 197: The `VPATH' macro should be set to a list of directories separated by colons. ! 198: When ! 199: .I make ! 200: searches for a file as a result of a dependency relation, it will ! 201: first search the current directory and then each of the directories on the ! 202: `VPATH' list. ! 203: If the file is found, the actual path to the file will be used, rather than ! 204: just the filename. ! 205: If `VPATH' is not defined, then only the current directory is searched. ! 206: .PP ! 207: One use for `VPATH' is when one has several programs that compile from the ! 208: same source. ! 209: The source can be kept in one directory and each set of ! 210: object files (along with a separate ! 211: .IR makefile ) ! 212: would be in a separate subdirectory. ! 213: The `VPATH' macro would point to the source directory in this case. ! 214: .PP ! 215: Command lines are executed one at a time, each by its ! 216: own shell. ! 217: A line is printed when it is executed unless ! 218: the special target `.SILENT' ! 219: is in ! 220: .I makefile, ! 221: or the first character of the command is `@'. ! 222: .PP ! 223: Commands returning nonzero status (see ! 224: .IR intro (1)) ! 225: cause ! 226: .I make ! 227: to terminate unless ! 228: the special target `.IGNORE' is in ! 229: .I makefile ! 230: or the command begins with ! 231: <tab><hyphen>. ! 232: .PP ! 233: Interrupt and quit cause the target to be deleted ! 234: unless the target is a directory or ! 235: depends on the special name `.PRECIOUS'. ! 236: .PP ! 237: Other options: ! 238: .TP ! 239: .B \-e ! 240: Environmental variables override assignments within makefiles. ! 241: .TP ! 242: .B \-i ! 243: Equivalent to the special entry `.IGNORE:'. ! 244: .TP ! 245: .B \-k ! 246: When a command returns nonzero status, ! 247: abandon work on the current entry, but ! 248: continue on branches that do not depend on the current entry. ! 249: .TP ! 250: .B \-n ! 251: Trace and print, but do not execute the commands ! 252: needed to update the targets. ! 253: .TP ! 254: .B \-t ! 255: Touch, i.e. update the modified date of targets, without ! 256: executing any commands. ! 257: .TP ! 258: .B \-r ! 259: Equivalent to an initial special entry `.SUFFIXES:' ! 260: with no list. ! 261: .TP ! 262: .B \-s ! 263: Equivalent to the special entry ! 264: `.SILENT:'. ! 265: .SH FILES ! 266: makefile, Makefile ! 267: .br ! 268: .SH "SEE ALSO" ! 269: sh(1), touch(1), f77(1), pc(1), getenv(3) ! 270: .br ! 271: S. I. Feldman ! 272: .I ! 273: Make \- A Program for Maintaining Computer Programs ! 274: .SH BUGS ! 275: Some commands return nonzero status inappropriately. ! 276: Use ! 277: .B \-i ! 278: to overcome the difficulty. ! 279: .br ! 280: Commands that are directly executed by the shell, ! 281: notably ! 282: .IR cd (1), ! 283: are ineffectual across newlines in ! 284: .I make. ! 285: .PP ! 286: `VPATH' is intended to act like the System V `VPATH' support, ! 287: but there is no guarantee that it functions identically.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.