使用Makefile使用外部库编译Fortran 77

时间:2018-09-26 10:24:55

标签: makefile compilation fortran dependencies

我有主程序Engine.f,它在LIB.f中调用函数/外部函数。 与C ++和Java不同,主程序中没有包含,因此可以进行编译。

我的Fortran编译器如何知道我正在使用另一个库?

我正在使用Eclipse中的photran。

MAKE文件:

.PHONY: all clean

# Change this line if you are using a different Fortran compiler
FORTRAN_COMPILER = gfortran

all: src/Engine.f
    $(FORTRAN_COMPILER) -O2 -g \
        -o bin/Engine.exe \
        src/Engine.f

clean:
    rm -f bin/Engine.exe *.mod

我在编译时遇到的错误:

undefined reference to (name of function in **LIB.f**)

1 个答案:

答案 0 :(得分:1)

.PHONY: all clean
all: Engine.exe

# Change this line if you are using a different Fortran compiler
FORTRAN_COMPILER = gfortran
FORTRAN_FLAGS=-O2 -g

%.o: src/%.f
    $(FORTRAN_COMPILER) $(FORTRAN_FLAGS) -c $<

Engine.exe: Lib.o Engine.o
    $(FORTRAN_COMPILER) $(FORTRAN_FLAGS) \
        -o bin/Engine.exe \
        Lib.o Engine.o

clean:
    rm -f *.o *.mod

在FORTRAN 77中,编译器“正义”需要在链接时在.o文件中提供该功能。您可以在下面测试Makefile,它应该执行您想要的操作。

如果您升级到Fortran的现代版本,则使用模块文件来构建库。