Makefile 创建FORTRAN生成文件

Makefile 创建FORTRAN生成文件,makefile,fortran,Makefile,Fortran,我有一个FORTRAN源代码,由许多不同的.F和.h文件组成。我需要从中构建一个可执行文件,但我遇到了一些问题。到目前为止,我生成的makefile(可能有错误,因为我是新手)是: 但是,如果键入命令: gfortran -o blah *.o 将生成可执行文件,因此似乎我在链接阶段的makefile中做错了什么 更新:5/9/2011 Sverre指出了我的makefile的最后一个问题。在我构建程序的第一个目标中,我只对第一个依赖项使用快捷方式命令($您使用GNU make吗?如果是 $(

我有一个FORTRAN源代码,由许多不同的.F和.h文件组成。我需要从中构建一个可执行文件,但我遇到了一些问题。到目前为止,我生成的makefile(可能有错误,因为我是新手)是:

但是,如果键入命令:

gfortran -o blah *.o
将生成可执行文件,因此似乎我在链接阶段的makefile中做错了什么

更新:5/9/2011


Sverre指出了我的makefile的最后一个问题。在我构建程序的第一个目标中,我只对第一个依赖项使用快捷方式命令($您使用GNU make吗?如果是

$(FC) $(FLFLAGS) -o $@ $<
$(FC)$(FLFLAGS)-o$@$<

可能是罪魁祸首。
$Make只是一种可以手动完成任务的自动化方法。您可以在命令行上编译此代码,而不使用Make吗?如果不行,则摆弄makefile将无济于事。您正在将链接标志应用于编译,反之亦然。有太多的源文件和头文件具有太多的依赖项,我无法编辑o这是手动的。Unaperson,你是对的。我愚蠢地切换了这两个变量。将它们切换回来可以让我生成.f文件。不过,gfortran给了我.h文件的错误。它似乎认为它们是C文件。但这是另一个问题。谢谢你的帮助。看起来你正在尝试构建你的
*.h
fi如果我没记错的话,
$还有,我想补充一点,这个问题的最终解决方案可能不适用于F90、F2003和F2008源文件,因为使用模块会产生依赖关系,然后对象“*.o”文件有它们自己的依赖项,它们需要以特殊的方式重新排序。在这种情况下,解决方案发布在中。是的,这是完美的。我做了更改,并且成功了。最后,有效的makefile发布在我的原始问题中。有趣的是,前几天我在我的办公室里为这段代码找到了一个makefile。呵呵无论如何,它比我的长20倍,因为它们列出了每个独立的依赖项。很高兴我学会了正确的方法。通常人们使用
$(FFLAGS)
而不是
$(FLFLAGS)
/usr/lib/gcc/x86_64-linux-gnu/4.4.5/libgfortranbegin.a(fmain.o): In function `main':
(.text+0x26): undefined reference to `MAIN__'
collect2: ld returned 1 exit status
gfortran -o blah *.o
# compiler
FC      := /usr/bin/gfortran-4.5

# compile flags
FCFLAGS = -g -c -fdefault-real-8 -fbacktrace -fno-align-commons -fbounds-check
# link flags
FLFLAGS =

# source files and objects
SRCS = $(patsubst %.F, %.o, $(wildcard *.F))
#       $(patsubst %.h, %.mod, $(wildcard *.h))

# program name
PROGRAM = vipre

all: $(PROGRAM)

$(PROGRAM): $(SRCS)
    $(FC) $(FLFLAGS) -o $@ $^

%.o: %.F
    $(FC) $(FCFLAGS) -o $@ $<

# %.mod: %.h
# $(FC) $(FCFLAGS) -o $@ $<

clean:
    rm -f *.o *.mod
$(FC) $(FLFLAGS) -o $@ $<