# UGH. GNU make comes with implicit rules. # We don't want any of them, and can't force users to run # --no-builtin-rules .SUFFIXES: #Compiling C programs # `N.o' is made automatically from `N.c' with a command of the form # `$(CC) -c $(CPPFLAGS) $(CFLAGS)'. %.o: %.c # Compiling C++ programs # `N.o' is made automatically from `N.cc' or `N.C' with a command of # the form `$(CXX) -c $(CPPFLAGS) $(CXXFLAGS)'. We encourage you to # use the suffix `.cc' for C++ source files instead of `.C'. %.o: %.cc # Compiling Pascal programs # `N.o' is made automatically from `N.p' with the command `$(PC) -c # $(PFLAGS)'. %.o: %.p # Compiling Fortran and Ratfor programs # `N.o' is made automatically from `N.r', `N.F' or `N.f' by running # the Fortran compiler. The precise command used is as follows: # `.f' # `$(FC) -c $(FFLAGS)'. %.o: %.f # `.F' # `$(FC) -c $(FFLAGS) $(CPPFLAGS)'. %.o: %.F # `.r' # `$(FC) -c $(FFLAGS) $(RFLAGS)'. %.o: %.r # Preprocessing Fortran and Ratfor programs # `N.f' is made automatically from `N.r' or `N.F'. This rule runs # just the preprocessor to convert a Ratfor or preprocessable # Fortran program into a strict Fortran program. The precise # command used is as follows: # `.F' # `$(FC) -F $(CPPFLAGS) $(FFLAGS)'. %.f: %.F # `.r' # `$(FC) -F $(FFLAGS) $(RFLAGS)'. %.f: %.r # Compiling Modula-2 programs # `N.sym' is made from `N.def' with a command of the form `$(M2C) # $(M2FLAGS) $(DEFFLAGS)'. `N.o' is made from `N.mod'; the form is: # `$(M2C) $(M2FLAGS) $(MODFLAGS)'. %.sym: %.def %.o: %.mod # Assembling and preprocessing assembler programs # `N.o' is made automatically from `N.s' by running the assembler, # `as'. The precise command is `$(AS) $(ASFLAGS)'. %.o: %.s # `N.s' is made automatically from `N.S' by running the C # preprocessor, `cpp'. The precise command is `$(CPP) $(CPPFLAGS)'. %.s: %.S # Linking a single object file # `N' is made automatically from `N.o' by running the linker # (usually called `ld') via the C compiler. The precise command # used is `$(CC) $(LDFLAGS) N.o $(LOADLIBES) $(LDLIBS)'. %: %.o # This rule does the right thing for a simple program with only one # source file. It will also do the right thing if there are multiple # object files (presumably coming from various other source files), # one of which has a name matching that of the executable file. # Thus, # x: y.o z.o # when `x.c', `y.c' and `z.c' all exist will execute: # cc -c x.c -o x.o # cc -c y.c -o y.o # cc -c z.c -o z.o # cc x.o y.o z.o -o x # rm -f x.o # rm -f y.o # rm -f z.o # In more complicated cases, such as when there is no object file # whose name derives from the executable file name, you must write # an explicit command for linking. # Each kind of file automatically made into `.o' object files will # be automatically linked by using the compiler (`$(CC)', `$(FC)' or # `$(PC)'; the C compiler `$(CC)' is used to assemble `.s' files) # without the `-c' option. This could be done by using the `.o' # object files as intermediates, but it is faster to do the # compiling and linking in one step, so that's how it's done. # Yacc for C programs # `N.c' is made automatically from `N.y' by running Yacc with the # command `$(YACC) $(YFLAGS)'. %.c: %.y # Lex for C programs # `N.c' is made automatically from `N.l' by by running Lex. The # actual command is `$(LEX) $(LFLAGS)'. %.c: %.l # Lex for Ratfor programs # `N.r' is made automatically from `N.l' by by running Lex. The # actual command is `$(LEX) $(LFLAGS)'. %.r: %.l # The convention of using the same suffix `.l' for all Lex files # regardless of whether they produce C code or Ratfor code makes it # impossible for `make' to determine automatically which of the two # languages you are using in any particular case. If `make' is # called upon to remake an object file from a `.l' file, it must # guess which compiler to use. It will guess the C compiler, because # that is more common. If you are using Ratfor, make sure `make' # knows this by mentioning `N.r' in the makefile. Or, if you are # using Ratfor exclusively, with no C files, remove `.c' from the # list of implicit rule suffixes with: # .SUFFIXES: # .SUFFIXES: .o .r .f .l ... # Making Lint Libraries from C, Yacc, or Lex programs # `N.ln' is made from `N.c' by running `lint'. The precise command # is `$(LINT) $(LINTFLAGS) $(CPPFLAGS) -i'. The same command is # used on the C code produced from `N.y' or `N.l'. %.ln: %.c # TeX and Web # `N.dvi' is made from `N.tex' with the command `$(TEX)'. `N.tex' # is made from `N.web' with `$(WEAVE)', or from `N.w' (and from # `N.ch' if it exists or can be made) with `$(CWEAVE)'. `N.p' is # made from `N.web' with `$(TANGLE)' and `N.c' is made from `N.w' # (and from `N.ch' if it exists or can be made) with `$(CTANGLE)'. %.dvi: %.tex %.tex: %.web %.tex: %.w %.tex: %.ch %.p: %.web %.c: %.w %.w: %.ch # Texinfo and Info # `N.dvi' is made from `N.texinfo', `N.texi', or `N.txinfo', with # the command `$(TEXI2DVI) $(TEXI2DVI_FLAGS)'. `N.info' is made from # `N.texinfo', `N.texi', or `N.txinfo', with the command # `$(MAKEINFO) $(MAKEINFO_FLAGS)'. %.dvi: %.texinfo %.dvi: %.texi %.dvi: %.txinfo %.info: %.texinfo %.info: %.texi %.info: %.txinfo # RCS # Any file `N' is extracted if necessary from an RCS file named # either `N,v' or `RCS/N,v'. The precise command used is # `$(CO) $(COFLAGS)'. `N' will not be extracted from RCS if it # already exists, even if the RCS file is newer. The rules for RCS # are terminal (*note Match-Anything Pattern Rules: Match-Anything # Rules.), so RCS files cannot be generated from another source; # they must actually exist. %: %,v %: RCS/%,v # SCCS # Any file `N' is extracted if necessary from an SCCS file named # either `s.N' or `SCCS/s.N'. The precise command used is # `$(GET) $(GFLAGS)'. The rules for SCCS are terminal (*note # Match-Anything Pattern Rules: Match-Anything Rules.), so SCCS # files cannot be generated from another source; they must actually # exist. %: s.% %: SCCS/s.% # For the benefit of SCCS, a file `N' is copied from `N.sh' and made # executable (by everyone). This is for shell scripts that are # checked into SCCS. Since RCS preserves the execution permission # of a file, you do not need to use this feature with RCS. %: %.sh # We recommend that you avoid using of SCCS. RCS is widely held to # be superior, and is also free. By choosing free software in place # of comparable (or inferior) proprietary software, you support the # free software movement. # Usually, you want to change only the variables listed in the table # above, which are documented in the following section. # However, the commands in built-in implicit rules actually use # variables such as `COMPILE.c', `LINK.p', and `PREPROCESS.S', whose # values contain the commands listed above. # `make' follows the convention that the rule to compile a `.X' source # file uses the variable `COMPILE.X'. Similarly, the rule to produce an # executable from a `.X' file uses `LINK.X'; and the rule to preprocess a # `.X' file uses `PREPROCESS.X'. # Every rule that produces an object file uses the variable # `OUTPUT_OPTION'. `make' defines this variable either to contain `-o # $@', or to be empty, depending on a compile-time option. You need the # `-o' option to ensure that the output goes into the right file when the # source file is in a different directory, as when using `VPATH' (*note # Directory Search::). However, compilers on some systems do not accept # a `-o' switch for object files. If you use such a system, and use # `VPATH', some compilations will put their output in the wrong place. A # possible workaround for this problem is to give `OUTPUT_OPTION' the # value `; mv $*.o $@'.