As an example, consider the Makefile.in file associated with cscf:
srcdir = @srcdir@ VPATH = @srcdir@ include ../MakeVars PSILIBS = -lPSI_file30 -lPSI_chkpt -lPSI_iwl -lPSI_psio -lPSI_ciomr -lPSI_ipv1 TRUESRC = \ cscf.c cleanup.c dft_inputs.c diis.c dmat.c \ dmat_2.c ecalc.c errchk.c findit.c \ formg2.c formgc.c formgo.c form_vec.c gprgid.c init_scf.c \ packit_c.c packit_o.c rdone.c rdtwo.c rotate_vector.c scf_input.c \ scf_iter.c scf_iter_2.c schmit.c sdot.c shalf.c check_rot.c phases.c\ guess.c sortev.c occ_fun.c init_uhf.c cmatsplit.c dmatuhf.c \ findit_uhf.c uhf_iter.c schmit_uhf.c diis2_uhf.c formg_direct.c \ orb_mix.c BINOBJ = $(TRUESRC:%.c=%.o) ALLOC = include ../MakeRules ifneq ($(DODEPEND),no) $(BINOBJ:%.o=%.d): $(DEPENDINCLUDE) include $(BINOBJ:%.o=%.d) endif install_man:: cscf.1 $(MKDIRS) $(mandir)/man1 $(INSTALL_INCLUDE) $^ $(mandir)/man1
The @string@ directives tell the configure script where to insert certain variables is has determined from the system. This Makefile input also includes two external Makefiles, MakeVars and MakeRules, both of which are in the parent directory. These files contain (not surprisingly) numerous necessary variables (e.g. the local C compiler name) and rules (e.g. how to generate the module itself) for compilation and installation of cscf. Similar files exist for the PSI libraries as well. We recommend that programmer's spend some time studying the PSI Makefile structure.