Makefile来自Fortran固定格式和免费文件

时间:2016-10-15 20:15:05

标签: makefile fortran

我需要从包含一些模块的固定和免费文件制作程序。 我在makefile的开头添加了all指令。 然后我需要编译几个.f90文件(它们包含几个模块)。 然后我添加了一个规则来编译.f文件。

当我运行make时,它首先尝试编译.f文件。 我应该更改/添加什么?

我使用gfortran作为编译器。

Makefile如下所示:

All: exename

Firstf90.o: Firstf90.f90
<tab>gfortran -c $<
Secondf90.o: Second.f90 
<tab>gfortran -c $<
%.o: %.f
<tab>gfortran -c $^

exename: *.o
<tab>gfortran -o exename $^

2 个答案:

答案 0 :(得分:1)

使用以下行:

exename: *.o

您告诉make exename依赖于扩展名为.o的所有文件。但是在你创建第一个.o文件之前,没有,这意味着make认为它完全不依赖于任何内容。

令人讨厌的是,一旦目标文件存在,这个Makefile就会完全符合您的期望,这使得很难发现它存在任何问题。

尝试这样的事情:

FIXED_SOURCES = $(wildcard *.f) 
FREE_SOURCES = $(wildcard *.f90)
FIXED_OBJECTS = $(patsubst %.f,%.o,${FIXED_SOURCES})
FREE_OBJECTS = $(patsubst %.f90,%.o,${FREE_SOURCES})

all : exename

${FIXED_OBJECTS} : %.o : %.f
<tab>gfortran -o $@ -c $^

${FREE_OBJECTS} : %.o : %.f90
<tab>gfortran -o $@ -c $^

exename : ${FIXED_OBJECTS} ${FREE_OBJECTS}
<tab>gfortran -o $@ $^

注意:通常我会在发布之前对其进行测试,但目前我还不能。此外,有人可能会为您提供更简洁的Makefile

答案 1 :(得分:0)

  

当我运行make时,它首先尝试编译f文件。

这是一个问题吗?如果需要以某种方式编译它们,即由于模块,可以将依赖项添加到Makefile。假设mymod.f90创建prog.f90使用的模块。因此,在编译mymod.f90之前,需要编译prog.f90。简单:将此行添加到Makefile

prog.o : mymod.o

这声明mymod.oprog.o的先决条件,这意味着在编译prog.o之前,首先检查mymod.o是否存在并且是最新的。< / p>