我在makefile中包含一个库时遇到了一些麻烦。
库nlopt
安装在/usr/lib
中,当我从命令行编译时,我的程序正常运行:
gfortran -I/usr/include main.f90 -L/usr/lib -lnlopt -lm -o exec
但是我需要使用makefile。下面的一个似乎很好,但它不起作用,我得到:
main.f90:19: Error: Can't open included file 'nlopt.f'
请帮忙找到错误吗?
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
(在$(f90comp)和rm之前,有Tab)
答案 0 :(得分:4)
您的错误消息告诉您nlopt.f
中包含的main.f90
在编译时不可用。需要向编译器提供此文件的路径。您正在一行中正确地执行此操作,因为您在提供路径时一次编译和链接:
gfortran -I/usr/include main.f90 -L/usr/lib -lnlopt -lm -o exec
因为这有效,而make
没有,nlopt.f
显然不与main.f90
位于同一目录中,而是位于/usr/include
中。您需要修改Makefile中的编译行:
main.o: main.f90
$(f90comp) -I/usr/include -c main.f90