|
|
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.