2012-03-25 14 views
1

Ich habe einige Probleme mit der Aufnahme einer Bibliothek in einem Makefile.Fehler beim Einbinden einer Bibliothek in Makefile

Die Bibliothek nlopt wird in /usr/lib und mein Programm installiert richtig läuft, wenn ich es von der Kommandozeile kompilieren:

gfortran -I/usr/include main.f90 -L/usr/lib -lnlopt -lm -o exec

aber ich brauche eine Make-Datei zu verwenden. Die unter in Ordnung zu sein scheint, aber es funktioniert nicht, erhalte ich:

main.f90:19: Error: Can't open included file 'nlopt.f'

Könnten Sie bei der Suche nach den Fehlern bitte helfen?


INCLUDES = -I/usr/include 

LFLAGS = -L/usr/lib 

LIBS = -lnlopt -lm 

objects = main.o 

f90comp = gfortran 

exec: $(objects) 
    $(f90comp) $(INCLUDES) -o exec $(objects) $(LFLAGS) $(LIBS) 

main.o: main.f90 
    $(f90comp) -c main.f90 

clean: 
    rm *.o *.mod exec 
    rm $(objects) 

# End of the makefile 

(Vor $ (f90comp) und rm gibt es Tab)

+2

Wo ist die Datei 'nlopt.f'? Ist es in 'usr/include'? Und sind Sie sicher, dass der Compiler die Reihenfolge der Argumente nicht interessiert? (Ich würde die * genaue * gleiche Reihenfolge versuchen, um sicher zu sein.) – Beta

+1

Können Sie die gesamte Ausgabe von 'make' zeigen? Ich habe das Gefühl, die Zeile unmittelbar vor der Fehlermeldung wäre aufschlussreich. – sarnold

+1

Es ist auch manchmal nützlich, 'make -n' zu versuchen, da dies nur zeigt, welche Befehle make ausführen möchte. – mgilson

Antwort

4

Ihre Fehlermeldung besagt, dass nlopt.f, die Sie in Ihrem main.f90 sind inklusive, bei der Kompilierung nicht verfügbar ist. Ein Pfad zu dieser Datei muss dem Compiler bereitgestellt werden. Sie tun dies richtig in Ihrem Motto, weil Sie in einem Rutsch kompilieren und verknüpfen, während der Pfad bereitstellt:

gfortran -I/usr/include main.f90 -L/usr/lib -lnlopt -lm -o exec 

Da das funktioniert und make nicht, nlopt.f ist offenbar nicht in demselben Verzeichnis wie main.f90 sitzen, aber eher in /usr/include. Sie müssen die Kompilierungszeile in Ihrem Makefile ändern:

main.o: main.f90 
    $(f90comp) -I/usr/include -c main.f90 
Verwandte Themen