在makefile中包含库时出错

时间:2012-03-25 23:32:09

标签: makefile fortran

我在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)

1 个答案:

答案 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