2016-05-01 5 views
2
gg=mpif90 
DEPS=matrix.mod 
OBJ= main.o sub1.o 

main.out: $(OBJ) 
    $(gg) -o [email protected] $^ 
%.mod:%.90 %.o 
    $(gg) -c -o [email protected] $^ 

%.o:%.f90 $(DEPS) 
    $(gg) -c -o [email protected] $^ 

.PHONY: clean 

clean: 
    -rm -f *.o *~ 

Schauen. Das Hauptprogramm ist main.f90. sub1.f90 wird von main.f90 aufgerufen werden. Beide werden matrix.f90 verwenden, was ein Modul ist. Ich weiß, dass ich das ausführbare Programm ohne compile then link direkt erzeugen kann. Aber ich mag das nicht.Wie schreibt man ein Makefile für Fortran mit Modulen?

+0

Schwierige Frage: Das Problem ist, dass der Name der '.mod' Dateien vom Compiler abhängt. Ich bin mir nicht sicher, ob der Standard dem zustimmt. –

Antwort

1

Die mod Datei ist nur ein Nebenprodukt %.o kompilieren, Sie nicht -o [email protected] hier verwendet werden soll, ist es

%.mod: %.90 
    $(gg) -c $^ 

Dies wird für die meisten Fälle zu

ändern arbeiten, aber nicht alle. Das liegt daran, dass der Name der mod Datei nur von Modulname abhängt, es hat nichts mit dem Quelldateinamen zu tun. Der sicherste Weg ist, die Abhängigkeit explizit anzugeben.

matrix.mod: matrix.f90 
    $(gg) -c matrix.f90 

Manchmal eine f90 Quelldatei kann zwei oder mehr Module enthalten.

matrix33.mod matrix99.mod: matrix.f90 
    $(gg) -c matrix.f90 
Verwandte Themen