|
|
1.1 ! root 1: .TI F77/MAKE "Sep. 4, 1985" ! 2: Make - A System for Program Development and Maintenance ! 3: ! 4: The UNIX utility 'make' is a program development tool that greatly ! 5: enhances the construction and maintenance of moderate to large programs ! 6: in any language. ! 7: ! 8: \&'Make' is used to find out which object files that a program depends on ! 9: are out of date, and to have them automatically recompiled. ! 10: To use 'make', you must describe the dependencies within the program in ! 11: a file called 'makefile' or 'Makefile'. Here is a simple 'Makefile' ! 12: for a program 'prog' which is made from the source in 'main.f', ! 13: \&'sub1.f' and 'sub2.f': ! 14: ! 15: .nf ! 16: prog: main.o sub1.o sub2.o ! 17: f77 main.o sub1.o sub2.o -o prog ! 18: .fi ! 19: ! 20: The first line describes the target, 'prog', and gives the name of ! 21: the three object files it depends on. The second line tells how to ! 22: create the target file once the files it depends on are up to date. ! 23: ! 24: \&'Make' requires that the target file name MUST start in column one and ! 25: the next line MUST start with a tab (control-I), not with blanks. ! 26: ! 27: To use this makefile, type: 'make'. Then 'make' will check that the ! 28: three object files exist and are more recent than the corresponding ! 29: source files; e.g. if 'main.f' was last changed on April 20, 5:02 and ! 30: \&'main.o' was last changed on April 20, 4:58, then 'make' will recompile ! 31: \&'main.f' to generate an up to date 'main.o'. If however, 'main.o' is ! 32: more recent than 'main.f', it will not be recompiled. ! 33: ! 34: Once the three files named on the first line are up to date, 'make' ! 35: checks whether any of them are newer than 'prog'. If so, it ! 36: executes the next line to generate a new version of 'prog'; ! 37: otherwise, it stops and reports 'prog' is up to date. ! 38: ! 39: For this example, typing 'make' when the object files do not exist ! 40: results in: ! 41: ! 42: .nf ! 43: f77 -c main.f ! 44: main.f: ! 45: MAIN: ! 46: f77 -c sub1.f ! 47: sub1.f: ! 48: sub1: ! 49: f77 -c sub2.f ! 50: sub2.f: ! 51: sub2: ! 52: f77 main.o sub1.o sub2.o -o doit ! 53: Loading prog ... ! 54: .fi ! 55: ! 56: If you type 'make' again: ! 57: ! 58: `prog' is up to date. ! 59: ! 60: If you now edit 'main.f' and then type 'make': ! 61: ! 62: .nf ! 63: f77 -c main.f ! 64: main.f: ! 65: MAIN: ! 66: f77 main.o sub1.o sub2.o -o doit ! 67: Loading prog ... ! 68: .fi ! 69: ! 70: \&'Make' only performs those steps that are needed to keep 'prog' up to date. ! 71: To see what 'make' would do without actually doing it, type 'make -n'. ! 72: ! 73: Here is a more advanced 'Makefile'. FFLAGS is a special string known ! 74: to 'make' in which you can specify f77 compilation flags; here '-g' is ! 75: specified to save the symbol table for use with the symbolic debugger. ! 76: OBJECTS and SOURCES are defined as lists of file names. ! 77: ! 78: .nf ! 79: FFLAGS = -g ! 80: OBJECTS = main.o sub1.o sub2.o sub3.o sub4.o sub5.o ! 81: SOURCES = main.f sub1.f sub2.f sub3.f sub4.f sub5.f ! 82: ! 83: prog: $(OBJECTS) ! 84: f77 -g $(OBJECTS) -o prog -lf77plot -l4014 ! 85: ! 86: main.o sub1.o: block1.h ! 87: sub2.o sub3.o sub4.o: block2.h ! 88: ! 89: # to print all the source on the line printer ! 90: print: ; pr block1.h block2.h $(SOURCES) | lpr ! 91: ! 92: # to remove all the object files and core dumps ! 93: remove: ; rm -f $(OBJECTS) core ! 94: .fi ! 95: ! 96: The linking line specifies the '-g' flag because FFLAGS is used automatically ! 97: only for compilations. ! 98: This makefile is for a graphics program which runs on a Tektronics 4014 ! 99: terminal; thus the linking line ! 100: specifies \%'-lf77plot' for the f77 graphics interface ! 101: library (see "man 3f plot") and \%'-l4014' for the Tektronics 4014 ! 102: plot library (see "man 3 plot"). ! 103: ! 104: The next two lines specify additional ! 105: dependencies; both 'main.o' and 'sub1.o' depend on the file 'block1.h' ! 106: and three object files depend on 'block2.h'. These two files define ! 107: common blocks and are included via the 'include' statement (see "help ! 108: f77 style"). Now if 'block1.h' is changed, 'make' will ! 109: automatically recompile 'main.o' and 'sub1.o', and if 'block2.h' is ! 110: changed, the three object files depending on it will be recompiled. ! 111: ! 112: The last lines define two new targets, 'print' and 'remove'. A name is ! 113: designated as a target by appearing on a line starting in ! 114: column one. The default when you type 'make' is to make the first ! 115: target. ! 116: Thus typing 'make' is equivalent to typing 'make prog'. ! 117: You can also type 'make print' which will cause all ! 118: the source files to be printed or 'make remove' to remove disk files ! 119: to save space. ! 120: ! 121: For more on-line information on 'make', see "man make". For more ! 122: extensive written documentation, see "A Guide for VAX UNIX Fortran ! 123: Users" and "Make - ! 124: A Program for Maintaining Computer Programs".
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.