quinlan@physics.utoronto.ca (Gerald Quinlan) (07/08/90)
Thanks to the people who responded to my question about using cpp to perform macro substitutions in Fortran programs. Nobody knew how to get cpp to do what I wanted it to do (it probably isn't possible). However, Sergio Gelato showed me how to do it with the m4 macro program. A trivial example of how this works is shown below. The Makefile says that "swap.f" is made from "swap.F" by running "swap.F" first through cpp and then through m4. I suppose I could eliminate the cpp stuff and do everything with m4, but the program that I wanted to use this trick in has a bunch of cpp commands and I'm too lazy to change them. ----------------------------- Makefile ----------------------------------- # Tell make how to make .f files from .F files. .SUFFIXES: .F .f .F.f: /lib/cpp -P $(CPPFLAGS) $*.F | m4 > $*.f ----------------------------- swap.F ----------------------------------- #ifdef INLINE_SWAP define(CALL_SWAP,`dummy=$1 $1=$2 $2=dummy') #endif program swap a=3.0 b=4.0 #ifdef INLINE_SWAP CALL_SWAP(A,B) #else call swap(a,b) #endif stop end ------------------------ make swap.f ------------------------------------ program swap a=3.0 b=4.0 dummy=A A=B B=dummy stop end --------------- make "CPPFLAGS=-DINLINE_SWAP" swap.f ------------------------ program swap a=3.0 b=4.0 dummy=A A=B B=dummy stop end -----------------------------------------------------------------------------