在makefile中包含库时出错
我在makefile中包含库时遇到一些问题 库nlopt安装在/usr/lib中,当我从命令行编译它时,我的程序会正常运行: gfortran-I/usr/include main.f90-L/usr/lib-lnlopt-lm-o exec 但是我需要使用一个makefile。下面这个看起来不错,但不起作用,我明白了: main.f90:19:错误:无法打开包含的文件“nlopt.f” 你能帮我找到这个错误吗在makefile中包含库时出错,makefile,fortran,Makefile,Fortran,我在makefile中包含库时遇到一些问题 库nlopt安装在/usr/lib中,当我从命令行编译它时,我的程序会正常运行: gfortran-I/usr/include main.f90-L/usr/lib-lnlopt-lm-o exec 但是我需要使用一个makefile。下面这个看起来不错,但不起作用,我明白了: main.f90:19:错误:无法打开包含的文件“nlopt.f” 你能帮我找到这个错误吗 在$f90comp和rm之前,有一个选项卡您的错误消息告诉您,在main.f90中包
在$f90comp和rm之前,有一个选项卡您的错误消息告诉您,在main.f90中包含的nlopt.f在编译时不可用。需要向编译器提供此文件的路径。您在一行程序中正确地执行了此操作,因为您在提供路径的同时一次性编译和链接:
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
错误消息告诉您,在编译时,包含在main.f90中的nlopt.f不可用。需要向编译器提供此文件的路径。您在一行程序中正确地执行了此操作,因为您在提供路径的同时一次性编译和链接:
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
文件nlopt.f在哪里?是否在usr/include中?你确定编译器不关心参数顺序吗?我会尝试完全相同的顺序来确定。你能显示make的全部输出吗?我有一种感觉,你的错误消息前的那一行很有启发性。有时尝试make-n也很有用,因为它只会显示make试图运行的命令。文件nlopt.f在哪里?是否在usr/include中?你确定编译器不关心参数顺序吗?我会尝试完全相同的顺序来确定。你能显示make的全部输出吗?我有一种感觉,在您的错误消息之前的那一行很有启发性。尝试make-n有时也很有用,因为它只会向您显示make试图运行的命令。