Annotation of 43BSDReno/share/doc/ps1/12.make/make.ms, revision 1.1.1.1

1.1       root        1: .\"    @(#)make        6.1 (Berkeley) 5/4/86
                      2: .\"
                      3: .EH 'PS1:12-%''Make \(em A Program for Maintaining Computer Programs'
                      4: .OH 'Make \(em A Program for Maintaining Computer Programs''PS1:12-%'
                      5: .....TR 57
                      6: .\".RP
                      7: .de IT
                      8: .if n .ul
                      9: \&\\$3\f2\\$1\fR\^\&\\$2
                     10: ..
                     11: .TL
                     12: Make \(em A Program for Maintaining Computer Programs
                     13: .AU
                     14: S. I. Feldman
                     15: .AI
                     16: .MH
                     17: .AB
                     18: .PP
                     19: In a programming project, it is easy to lose track of which files need
                     20: to be reprocessed or recompiled after a change is made in some part of the source.
                     21: .I Make
                     22: provides a simple mechanism for maintaining up-to-date versions of programs that result
                     23: from many operations on a number of files.
                     24: It is possible to tell
                     25: .I Make
                     26: the sequence of commands that create certain files,
                     27: and the list of files that require other files to be current before the operations can be done.
                     28: Whenever a change is made in any part of the program,
                     29: the
                     30: .I Make
                     31: command will create the proper files simply, correctly,
                     32: and with a minimum amount of effort.
                     33: .PP
                     34: The basic operation of
                     35: .I Make
                     36: is to find the name of a needed target in the description, ensure that all of the files on which it depends exist and
                     37: are up to date, and then create the target if it has not been modified since its generators were.
                     38: The description file really defines the graph of dependencies;
                     39: .I Make
                     40: does a depth-first search of this graph
                     41: to determine what work is really necessary.
                     42: .PP
                     43: .I Make
                     44: also provides a simple macro substitution facility
                     45: and the ability to encapsulate commands in a single file
                     46: for convenient administration.
                     47: .sp 2
                     48: Revised April, 1986
                     49: .AE
                     50: .SH
                     51: Introduction
                     52: .PP
                     53: It is common practice to divide large programs into smaller, more manageable pieces.
                     54: The pieces may require quite different treatments:
                     55: some may need to be run through a macro processor, some may need to be processed by
                     56: a sophisticated program generator (e.g., Yacc[1] or Lex[2]).
                     57: The outputs of these generators may then have to be compiled with special options and with
                     58: certain definitions and declarations.
                     59: The code resulting from these transformations may then need to be loaded together with
                     60: certain libraries under the control of special options.
                     61: Related maintenance activities involve running complicated test scripts
                     62: and installing validated modules.
                     63: Unfortunately, it is very easy for a programmer to forget which files depend on which others,
                     64: which files have been modified recently, and the exact sequence of operations
                     65: needed to make or exercise a new version of the program.
                     66: After a long editing session, one may easily lose track of which files have been changed
                     67: and which object modules are still valid,
                     68: since a change to a declaration can obsolete a dozen other files.
                     69: Forgetting to compile a routine that has been changed or that uses changed declarations will result in
                     70: a program that will not work, and a bug that can be very hard to track down.
                     71: On the other hand, recompiling everything in sight just to be safe is very wasteful.
                     72: .PP
                     73: The program described in this report mechanizes many of the activities of program development
                     74: and maintenance.
                     75: If the information on inter-file dependences and command sequences is stored in a file, the simple command
                     76: .DS
                     77: make
                     78: .DE
                     79: is frequently sufficient to update the interesting files,
                     80: regardless of the number that have been edited since the last ``make''.
                     81: In most cases, the description file is easy to write and changes infrequently.
                     82: It is usually easier to type the
                     83: .IT make
                     84: command than to issue even one of the needed operations, so the typical cycle of program development operations becomes
                     85: .DS
                     86: think \(em edit \(em \fImake\fR \(em test  . . .
                     87: .DE
                     88: .PP
                     89: .IT Make
                     90: is most useful for medium-sized programming projects;
                     91: it does not solve the problems of maintaining multiple source versions
                     92: or of describing huge programs.
                     93: .IT Make
                     94: was designed for use on Unix, but a version runs on GCOS.
                     95: .SH
                     96: Basic Features
                     97: .PP
                     98: The basic operation of
                     99: .IT make
                    100: is to update a target file by ensuring
                    101: that all of the files on which it depends exist and are up to date,
                    102: then creating the target if it has not been modified since its dependents were.
                    103: .IT Make
                    104: does a depth-first search of the graph of dependences.
                    105: The operation of the command depends on the ability to find the date and time
                    106: that a file was last modified.
                    107: .PP
                    108: To illustrate, let us consider a simple example:
                    109: A program named
                    110: .IT prog
                    111: is made by compiling and loading three C-language files
                    112: .IT x.c ,
                    113: .IT y.c ,
                    114: and
                    115: .IT z.c
                    116: with the
                    117: .IT lS
                    118: library.
                    119: By convention, the output of the C compilations will be found in files named
                    120: .IT x.o ,
                    121: .IT y.o ,
                    122: and
                    123: .IT z.o .
                    124: Assume that the files
                    125: .IT x.c
                    126: and
                    127: .IT y.c
                    128: share some declarations in a file named
                    129: .IT defs ,
                    130: but that
                    131: .IT z.c
                    132: does not.
                    133: That is,
                    134: .IT x.c
                    135: and
                    136: .IT y.c
                    137: have the line
                    138: .DS
                    139: #include "defs"
                    140: .DE
                    141: The following text describes the relationships and operations:
                    142: .DS
                    143: prog :  x.o  y.o  z.o
                    144:        cc  x.o  y.o  z.o   \-lS  \-o  prog
                    145: .sp .5
                    146: x.o  y.o :   defs
                    147: .DE
                    148: If this information were stored in a file named
                    149: .IT makefile ,
                    150: the command
                    151: .DS
                    152: make
                    153: .DE
                    154: would perform the operations needed to recreate
                    155: .IT prog
                    156: after any changes had been made to any of the four source files
                    157: .IT x.c ,
                    158: .IT y.c ,
                    159: .IT z.c ,
                    160: or
                    161: .IT defs .
                    162: .PP
                    163: .IT Make
                    164: operates using three sources of information:
                    165: a user-supplied description file (as above),
                    166: file names and ``last-modified'' times from the file system,
                    167: and built-in rules to bridge some of the gaps.
                    168: In our example, the first line says that
                    169: .IT prog
                    170: depends on three ``\fI.o\fR'' files.
                    171: Once these object files are current, the second line describes how to load them to create
                    172: .IT prog .
                    173: The third line says that
                    174: .IT x.o
                    175: and
                    176: .IT y.o
                    177: depend on the file
                    178: .IT defs .
                    179: From the file system,
                    180: .IT make
                    181: discovers that there are three ``\fI.c\fR'' files corresponding to the needed ``\fI.o\fR'' files,
                    182: and uses built-in information on how to generate an object from a source file
                    183: (\fIi.e.,\fR issue a ``cc\ \-c'' command).
                    184: .PP
                    185: The following long-winded description file is equivalent to the one above, but
                    186: takes no advantage of
                    187: .IT make 's
                    188: innate knowledge:
                    189: .DS
                    190: prog :  x.o  y.o  z.o
                    191:        cc  x.o  y.o  z.o  \-lS  \-o  prog
                    192: .sp .3
                    193: x.o :  x.c  defs
                    194:        cc  \-c  x.c
                    195: y.o :  y.c  defs
                    196:        cc  \-c  y.c
                    197: z.o :  z.c
                    198:        cc  \-c  z.c
                    199: .DE
                    200: .PP
                    201: If none of the source or object files had changed since the last time
                    202: .IT prog
                    203: was made, all of the files would be current, and
                    204: the command
                    205: .DS
                    206: make
                    207: .DE
                    208: would just announce this fact and stop.
                    209: If, however, the
                    210: .IT defs
                    211: file had been edited,
                    212: .IT x.c
                    213: and
                    214: .IT y.c
                    215: (but not
                    216: .IT z.c )
                    217: would be recompiled, and then
                    218: .IT prog
                    219: would be created from the new ``\fI.o\fR'' files.
                    220: If only the file
                    221: .IT y.c
                    222: had changed, only it would be recompiled, but it would still be necessary to reload
                    223: .IT prog .
                    224: .PP
                    225: If no target name is given on the
                    226: .IT make
                    227: command line, the first target mentioned in the description is created;
                    228: otherwise the specified targets are made.
                    229: The command
                    230: .DS
                    231: make x.o
                    232: .DE
                    233: would recompile
                    234: .IT x.o
                    235: if
                    236: .IT x.c
                    237: or
                    238: .IT defs
                    239: had changed.
                    240: .PP
                    241: If the file exists after the commands are executed,
                    242: its time of last modification is used in further decisions;
                    243: otherwise the current time is used.
                    244: It is often quite useful to include rules with mnemonic names and commands that do not
                    245: actually produce a file with that name.
                    246: These entries can take advantage of
                    247: .IT make 's
                    248: ability to generate files and substitute macros.
                    249: Thus, an entry
                    250: ``save''
                    251: might be included to copy a certain set of files, or an entry
                    252: ``cleanup''
                    253: might be used to throw away unneeded intermediate files.
                    254: In other cases one may maintain a zero-length file purely to keep track
                    255: of the time at which certain actions were performed.
                    256: This technique is useful for maintaining remote archives and listings.
                    257: .PP
                    258: .IT Make
                    259: has a simple macro mechanism for substituting in dependency lines and command strings.
                    260: Macros are defined by command arguments or description file lines with embedded equal signs.
                    261: A macro is invoked by preceding the name by a dollar sign;
                    262: macro names longer than one character must be parenthesized.
                    263: The name of the macro is either the single character after the dollar sign or a name inside parentheses.
                    264: The following are valid macro invocations:
                    265: .DS
                    266: $(CFLAGS)
                    267: $2
                    268: $(xy)
                    269: $Z
                    270: $(Z)
                    271: .DE
                    272: The last two invocations are identical.
                    273: $$ is a dollar sign.
                    274: All of these macros are assigned values during input, as shown below.
                    275: Four special macros change values during the execution of the command:
                    276: $\(**, $@, $?, and $<.
                    277: They will be discussed later.
                    278: The following fragment shows the use:
                    279: .DS
                    280: OBJECTS = x.o y.o z.o
                    281: LIBES = \-lS
                    282: prog: $(OBJECTS)
                    283:        cc $(OBJECTS)  $(LIBES)  \-o prog
                    284:   . . .
                    285: .DE
                    286: The command
                    287: .DS
                    288: make
                    289: .DE
                    290: loads the three object files with the
                    291: .IT lS
                    292: library.  The command
                    293: .DS
                    294: make  "LIBES= \-ll \-lS"
                    295: .DE
                    296: loads them with both the Lex (``\-ll'') and the Standard (``\-lS'') libraries,
                    297: since macro definitions on the command line override definitions in the description.
                    298: (It is necessary to quote arguments with embedded blanks in
                    299: .UX
                    300: commands.)
                    301: .PP
                    302: The following sections detail the form of description files and the command line,
                    303: and discuss options and built-in rules in more detail.
                    304: .SH
                    305: Description Files and Substitutions
                    306: .PP
                    307: A description file contains three types of information:
                    308: macro definitions,
                    309: dependency information,
                    310: and executable commands.
                    311: There is also a comment convention:
                    312: all characters after a sharp (#) are ignored, as is the sharp itself.
                    313: Blank lines and lines beginning with a sharp are totally ignored.
                    314: If a non-comment line is too long, it can be continued using a backslash.
                    315: If the last character of a line is a backslash, the backslash, newline,
                    316: and following blanks and tabs are replaced by a single blank.
                    317: .PP
                    318: A macro definition is a line containing an equal sign not preceded by a colon or a tab.
                    319: The name (string of letters and digits) to the left of the equal sign
                    320: (trailing blanks and tabs are stripped) is assigned the string of characters following the equal sign
                    321: (leading blanks and tabs are stripped.)
                    322: The following are valid macro definitions:
                    323: .DS
                    324: 2 = xyz
                    325: abc = \-ll \-ly \-lS
                    326: LIBES =
                    327: .DE
                    328: The last definition assigns LIBES the null string.
                    329: A macro that is never explicitly defined has the null string as value.
                    330: Macro definitions may also appear on the
                    331: .IT make
                    332: command line (see below).
                    333: .PP
                    334: Other lines give information about target files.
                    335: The general form of an entry is:
                    336: .DS
                    337: target1 [target2 . . .] :[:] [dependent1 . . .] [; commands] [# . . .]
                    338: [\fI(tab)\fR commands] [# . . .]
                    339:  . . .
                    340: .DE
                    341: Items inside brackets may be omitted.
                    342: Targets and dependents are strings of letters, digits, periods, and slashes.
                    343: (Shell metacharacters ``\(**'' and ``?'' are expanded.)
                    344: A command is any string of characters not including a sharp (except in quotes)
                    345: or newline.
                    346: Commands may appear either after a semicolon on a dependency line
                    347: or on lines beginning with a tab immediately following a dependency line.
                    348: .PP
                    349: A dependency line may have either a single or a double colon.
                    350: A target name may appear on more than one dependency line, but all of those lines must be of the
                    351: same (single or double colon) type.
                    352: .IP 1.
                    353: For the usual single-colon case,
                    354: at most one of these dependency lines may have a command sequence associated with it.
                    355: If the target is out of date with any of the dependents on any of the lines,
                    356: and a command sequence is specified (even a null one following a semicolon or tab),
                    357: it is executed; otherwise a default creation rule may be invoked.
                    358: .IP 2.
                    359: In the double-colon case, a command sequence may be associated with each dependency line;
                    360: if the target is out of date with any of the files on a particular line, the associated
                    361: commands are executed.
                    362: A built-in rule may also be executed.
                    363: This detailed form is of particular value in updating archive-type files.
                    364: .PP
                    365: If a target must be created, the sequence of commands is executed.
                    366: Normally, each command line is printed and then
                    367: passed to a separate invocation of the Shell after substituting for macros.
                    368: (The printing is suppressed in silent mode or if the command line begins with an @ sign).
                    369: .IT Make
                    370: normally stops if any command signals an error by returning a non-zero error code.
                    371: (Errors are ignored if the ``\-i'' flags has been specified on the
                    372: .IT make
                    373: command line,
                    374: if the fake target name ``.IGNORE'' appears in the description file,
                    375: or if the command string in the description file begins with a hyphen.
                    376: Some
                    377: .UX
                    378: commands return meaningless status).
                    379: Because each command line is passed to a separate invocation of the Shell,
                    380: care must be taken with certain commands (e.g., \fIcd\fR and Shell control commands) that have meaning only
                    381: within a single Shell process;
                    382: the results are forgotten before the next line is executed.
                    383: .PP
                    384: Before issuing any command, certain macros are set.
                    385: $@ is set to the name of the file to be ``made''.
                    386: $? is set to the string of names that were found to be younger than the target.
                    387: If the command was generated by an implicit rule (see below),
                    388: $< is the name of the related file that caused the action, and
                    389: $\(** is the prefix shared by the current and the dependent file names.
                    390: .PP
                    391: If a file must be made but there are no explicit commands or relevant
                    392: built-in rules,
                    393: the commands associated with the name ``.DEFAULT'' are used.
                    394: If there is no such name,
                    395: .IT make
                    396: prints a message and stops.
                    397: .SH
                    398: Command Usage
                    399: .PP
                    400: The
                    401: .IT make
                    402: command takes four kinds of arguments:
                    403: macro definitions, flags, description file names, and target file names.
                    404: .DS
                    405: make [ flags ]  [ macro definitions ]  [ targets ]
                    406: .DE
                    407: The following summary of the operation of the command explains how these arguments are interpreted.
                    408: .PP
                    409: First, all macro definition arguments (arguments with embedded equal signs) are analyzed
                    410: and the assignments made.
                    411: Command-line macros override corresponding definitions found in the description files.
                    412: .PP
                    413: Next, the flag arguments are examined.
                    414: The permissible flags are
                    415: .IP \-i
                    416: Ignore error codes returned by invoked commands.
                    417: This mode is entered if the fake target name ``.IGNORE'' appears in the description file.
                    418: .IP \-s
                    419: Silent mode.  Do not print command lines before executing.
                    420: This mode is also entered if the fake target name ``.SILENT'' appears in the description file.
                    421: .IP \-r
                    422: Do not use the built-in rules.
                    423: .IP \-n
                    424: No execute mode.  Print commands, but do not execute them.
                    425: Even lines beginning with an ``@'' sign are printed.
                    426: .IP \-t
                    427: Touch the target files (causing them to be up to date) rather than issue the usual commands.
                    428: .IP \-q
                    429: Question.
                    430: The
                    431: .IT make
                    432: command returns a zero or non-zero status code depending on whether the target file
                    433: is or is not up to date.
                    434: .IP \-p
                    435: Print out the complete set of macro definitions and target descriptions
                    436: .IP \-d
                    437: Debug mode.  Print out detailed information on files and times examined.
                    438: .IP \-f
                    439: Description file name.  The next argument is assumed to be the name of a description file.
                    440: A file name of ``\-'' denotes the standard input.
                    441: If there are no ``\-f\|'' arguments, the file named
                    442: .IT makefile
                    443: or
                    444: .IT Makefile
                    445: in the current directory is read.
                    446: The contents of the description files override the built-in rules if they are present).
                    447: .PP
                    448: Finally, the remaining arguments are assumed to be the names of targets to be made;
                    449: they are done in left to right order.
                    450: If there are no such arguments, the first name in the description files that does not
                    451: begin with a period is ``made''.
                    452: .SH
                    453: Implicit Rules
                    454: .PP
                    455: The
                    456: .ul
                    457: make
                    458: program uses a table of interesting suffixes and a set
                    459: of transformation rules to supply default dependency
                    460: information and implied commands.
                    461: (The Appendix describes these tables and means of overriding
                    462: them.)
                    463: The default suffix list is:
                    464: .KS
                    465: .sp
                    466: .nf
                    467: .ta 0.5i 1.5i
                    468:        \fI.o\fR        Object file
                    469:        \fI.c\fR        C source file
                    470:        \fI.e\fR        Efl source file
                    471:        \fI.r\fR        Ratfor source file
                    472:        \fI.f\fR        Fortran source file
                    473:        \fI.s\fR        Assembler source file
                    474:        \fI.y\fR        Yacc-C source grammar
                    475:        \fI.yr\fR       Yacc-Ratfor source grammar
                    476:        \fI.ye\fR       Yacc-Efl source grammar
                    477:        \fI.l\fR        Lex source grammar
                    478: .fi
                    479: .sp
                    480: .KE
                    481: The following diagram summarizes the default transformation paths.
                    482: If there are two paths connecting a pair of suffixes, the longer
                    483: one is used only if the intermediate file exists or is
                    484: named in the description.
                    485: .KS
                    486: .sp
                    487: .ft I
                    488: .ta 2i
                    489:        .o
                    490: .sp 2
                    491: .ta 0.75i 1.25i 1.6i 2.1i
                    492:        .c      .r      .e      .f  .s  .y  .yr  .ye  .l  .d
                    493: .sp 2
                    494: .ta 0.6i 1.25i 1.6i
                    495:        .y .l   .yr     .ye
                    496: .ft R
                    497: .sp
                    498: .KE
                    499: .PP
                    500: If the file
                    501: .ul
                    502: x.o
                    503: were needed and there were an
                    504: .ul
                    505: x.c
                    506: in the description or directory, it would be compiled.
                    507: If there were also an
                    508: .IT x.l ,
                    509: that grammar would be run through Lex before compiling the result.
                    510: However, if there were no
                    511: .ul
                    512: x.c
                    513: but there were an
                    514: .IT x.l ,
                    515: .IT make
                    516: would discard the intermediate C-language file and use the
                    517: direct link in the graph above.
                    518: .PP
                    519: It is possible to change the names of some of the compilers used in the
                    520: default, or the flag arguments with which they are invoked by knowing
                    521: the macro names used.
                    522: The compiler names are the macros AS, CC, RC, EC, YACC, YACCR, YACCE, and LEX.
                    523: The command
                    524: .DS
                    525: make CC=newcc
                    526: .DE
                    527: will cause the ``newcc'' command to be used instead of the
                    528: usual C compiler.
                    529: The macros CFLAGS, RFLAGS, EFLAGS, YFLAGS, and LFLAGS may be set to
                    530: cause these commands to be issued with optional flags.
                    531: Thus,
                    532: .DS
                    533: make "CFLAGS=\|\(miO"
                    534: .DE
                    535: causes the optimizing C compiler to be used.
                    536: .PP
                    537: Another special macro is `VPATH'.
                    538: The ``VPATH'' macro should be set to a list of directories separated by colons.
                    539: When
                    540: .I make
                    541: searches for a file as a result of a dependency relation, it will
                    542: first search the current directory and then each of the directories on the
                    543: ``VPATH'' list.
                    544: If the file is found, the actual path to the file will be used, rather than
                    545: just the filename.
                    546: If ``VPATH'' is not defined, then only the current directory is searched.
                    547: Note that ``VPATH'' is intended to act like the System V ``VPATH'' support,
                    548: but there is no guarantee that it functions identically.
                    549: .PP
                    550: One use for ``VPATH'' is when one has several programs that compile from the
                    551: same source.
                    552: The source can be kept in one directory and each set of
                    553: object files (along with a separate
                    554: .IR makefile )
                    555: would be in a separate subdirectory.
                    556: The ``VPATH'' macro would point to the source directory in this case.
                    557: .SH
                    558: Example
                    559: .PP
                    560: As an example of the use of
                    561: .ul
                    562: make,
                    563: we will present the description file used to maintain
                    564: the
                    565: .ul
                    566: make
                    567: command itself.
                    568: The code for
                    569: .ul
                    570: make
                    571: is spread over a number of C source files and a Yacc grammar.
                    572: The description file contains:
                    573: .DS
                    574: # Description file for the Make command
                    575: .sp .3
                    576: P = und \-3 | opr \-r2       # send to GCOS to be printed
                    577: FILES = Makefile version.c defs main.c doname.c misc.c files.c dosys.c\
                    578:        gram.y lex.c gcos.c
                    579: OBJECTS = version.o main.o doname.o misc.o files.o dosys.o gram.o
                    580: LIBES= \-lS
                    581: LINT = lint \-p
                    582: CFLAGS = \-O
                    583: .sp .3
                    584: make:  $(OBJECTS)
                    585:        cc $(CFLAGS) $(OBJECTS) $(LIBES) \-o make
                    586:        size make
                    587: .sp .3
                    588: $(OBJECTS):  defs
                    589: gram.o: lex.c
                    590: .sp .3
                    591: cleanup:
                    592:        -rm *.o gram.c
                    593:        -du
                    594: .sp .3
                    595: install:
                    596:        @size make /usr/bin/make
                    597:        cp make /usr/bin/make ; rm make
                    598: .sp .3
                    599: print:  $(FILES)       # print recently changed files
                    600:        pr $? | $P
                    601:        touch print
                    602: .sp .3
                    603: test:
                    604:        make \-dp | grep \-v TIME >1zap
                    605:        /usr/bin/make \-dp | grep \-v TIME >2zap
                    606:        diff 1zap 2zap
                    607:        rm 1zap 2zap
                    608: .sp .3
                    609: lint :  dosys.c doname.c files.c main.c misc.c version.c gram.c
                    610:        $(LINT) dosys.c doname.c files.c main.c misc.c version.c gram.c
                    611:        rm gram.c
                    612: .sp .3
                    613: arch:
                    614:        ar uv /sys/source/s2/make.a $(FILES)
                    615: .DE
                    616: .IT Make
                    617: usually prints out each command before issuing it.
                    618: The following output results from typing the simple command
                    619: .DS
                    620: make
                    621: .DE
                    622: in a directory containing only the source and description file:
                    623: .DS
                    624:  cc  \-c version.c
                    625:  cc  \-c main.c
                    626:  cc  \-c doname.c
                    627:  cc  \-c misc.c
                    628:  cc  \-c files.c
                    629:  cc  \-c dosys.c
                    630:  yacc  gram.y
                    631:  mv y.tab.c gram.c
                    632:  cc  \-c gram.c
                    633:  cc  version.o main.o doname.o misc.o files.o dosys.o gram.o \-lS \-o make
                    634:  13188+3348+3044 = 19580b = 046174b
                    635: .DE
                    636: Although none of the source files or grammars were mentioned
                    637: by name in the description file,
                    638: .IT make
                    639: found them using its suffix rules and issued the needed commands.
                    640: The string of digits results from the ``size make''
                    641: command; the printing of the command line itself was
                    642: suppressed by an @ sign.
                    643: The @ sign on the
                    644: .IT size
                    645: command in the description file suppressed the printing of the command,
                    646: so only the sizes are written.
                    647: .PP
                    648: The last few entries in the description file are useful maintenance sequences.
                    649: The ``print'' entry prints only the files that have been changed since the last
                    650: ``make print'' command.
                    651: A zero-length file
                    652: .IT print
                    653: is maintained to keep track of the time of the printing;
                    654: the $? macro in the command line then picks up only the names of the files
                    655: changed since
                    656: .IT print
                    657: was touched.
                    658: The printed output can be sent to a different printer or to a file by changing the definition of the
                    659: .IT P
                    660: macro:
                    661: .DS
                    662: make print "P = opr \-sp"
                    663:        \fIor\fR
                    664: make print "P=  cat >zap"
                    665: .DE
                    666: .SH
                    667: Suggestions and Warnings
                    668: .PP
                    669: The most common difficulties arise from
                    670: .IT make 's
                    671: specific meaning of dependency.
                    672: If file
                    673: .IT x.c
                    674: has a ``#include "defs"''
                    675: line, then the object file
                    676: .IT x.o
                    677: depends on
                    678: .IT defs ;
                    679: the source file
                    680: .IT x.c
                    681: does not.
                    682: (If
                    683: .IT defs
                    684: is changed, it is not necessary to do anything
                    685: to the file
                    686: .IT x.c ,
                    687: while it is necessary to recreate
                    688: .IT x.o .)
                    689: .PP
                    690: To discover what
                    691: .IT make
                    692: would do, the ``\-n'' option is very useful.
                    693: The command
                    694: .DS
                    695: make \-n
                    696: .DE
                    697: orders
                    698: .IT make
                    699: to print out the commands it would issue without actually taking the time to execute them.
                    700: If a change to a file is absolutely certain to be benign
                    701: (e.g., adding a new definition to an include file),
                    702: the ``\-t'' (touch) option
                    703: can save a lot of time:
                    704: instead of issuing a large number of superfluous recompilations,
                    705: .IT make
                    706: updates the modification times on the affected file.
                    707: Thus, the command
                    708: .DS
                    709: make \-ts
                    710: .DE
                    711: (``touch silently'') causes the relevant files to appear up to date.
                    712: Obvious care is necessary, since this mode of operation subverts
                    713: the intention of
                    714: .IT make
                    715: and destroys all memory of the previous relationships.
                    716: .PP
                    717: The debugging flag (``\-d'') causes
                    718: .IT make
                    719: to print out a very detailed description of what it is doing, including the
                    720: file times.  The output is verbose, and recommended only as a last resort.
                    721: .SH
                    722: Acknowledgments
                    723: .PP
                    724: I would like to thank S. C. Johnson for suggesting this approach
                    725: to program maintenance control.
                    726: I would like to thank S. C. Johnson and H. Gajewska for being
                    727: the prime guinea pigs during development of
                    728: .IT make .
                    729: .SH
                    730: References
                    731: .IP 1.
                    732: S. C. Johnson,
                    733: ``Yacc \(em Yet Another Compiler-Compiler'',
                    734: Bell Laboratories
                    735: Computing Science Technical Report #32,
                    736: July 1978.
                    737: .IP 2.
                    738: M. E. Lesk,
                    739: ``Lex \(em A Lexical Analyzer Generator'',
                    740: Computing Science Technical Report #39,
                    741: October 1975.
                    742: .bp
                    743: .SH
                    744: Appendix.  Suffixes and Transformation Rules
                    745: .PP
                    746: The
                    747: .ul
                    748: make
                    749: program itself does not know what file name suffixes are interesting
                    750: or how to transform a file with one suffix into a file with another
                    751: suffix.
                    752: This information is stored in an internal table that has the form of a description file.
                    753: If the ``\-r'' flag is used, this table is not used.
                    754: .PP
                    755: The list of suffixes is actually the dependency list for the name
                    756: ``.SUFFIXES'';
                    757: .ul
                    758: make
                    759: looks for a file with any of the suffixes on the list.
                    760: If such a file exists, and if there is a transformation
                    761: rule for that combination,
                    762: .ul
                    763: make
                    764: acts as described earlier.
                    765: The transformation rule names are the concatenation of the
                    766: two suffixes.
                    767: The name of the rule to transform a ``\fI.r\fR'' file to a ``\fI.o\fR'' file
                    768: is thus ``\fI.r.o\fR''.
                    769: If the rule is present and no explicit command sequence
                    770: has been given in the user's description files, the command
                    771: sequence for the rule ``.r.o'' is used.
                    772: If a command is generated by using one of these suffixing rules,
                    773: the macro $\(** is given the value of the stem
                    774: (everything but the suffix) of the name of the file to be made,
                    775: and the macro $< is the name of the dependent that caused the action.
                    776: .PP
                    777: The order of the suffix list is significant, since it is scanned from
                    778: left to right, and the first name that is formed that has both a file
                    779: and a rule associated with it is used.
                    780: If new names are to be appended, the user can just add an entry for
                    781: ``.SUFFIXES'' in his own description file; the dependents will be added to the usual list.
                    782: A ``.SUFFIXES'' line without any dependents deletes the current list.
                    783: (It is necessary to clear the current list if the order of names is to be changed).
                    784: .PP
                    785: The following is an excerpt from the default rules file:
                    786: .DS
                    787: .ta .5i 1i
                    788:  .SUFFIXES : .o .c .e .r .f .y .yr .ye .l .s
                    789:  YACC=yacc
                    790:  YACCR=yacc \-r
                    791:  YACCE=yacc \-e
                    792:  YFLAGS=
                    793:  LEX=lex
                    794:  LFLAGS=
                    795:  CC=cc
                    796:  AS=as \-
                    797:  CFLAGS=
                    798:  RC=ec
                    799:  RFLAGS=
                    800:  EC=ec
                    801:  EFLAGS=
                    802:  FFLAGS=
                    803:  .c.o :
                    804:        $(CC) $(CFLAGS) \-c $<
                    805:  .e.o .r.o .f.o :
                    806:        $(EC) $(RFLAGS) $(EFLAGS) $(FFLAGS) \-c $<
                    807:  .s.o :
                    808:        $(AS) \-o $@ $<
                    809:  .y.o :
                    810:        $(YACC) $(YFLAGS) $<
                    811:        $(CC) $(CFLAGS) \-c y.tab.c
                    812:        rm y.tab.c
                    813:        mv y.tab.o $@
                    814:  .y.c :
                    815:        $(YACC) $(YFLAGS) $<
                    816:        mv y.tab.c $@
                    817: .DE

unix.superglobalmegacorp.com

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