-1

我正在查看 Makefile 以找出我的问题。我的问题是编译中包含两个目录,它们具有完全相同名称的 fortran 源文件,编译本身如何决定使用哪个源文件。至于我的情况,这两个目录是 /dir1/ 和 /dir2/。两者都有一个名为 test.F90 的 fortran 文件,并且两个目录都包含在包含目录中。那为什么编译/dir1/test.F90而不是/dir2/test.F90。Makefile 代码提取是

 SOURCES := $(shell cat Srcfiles)
 OBJS    := $(addsuffix .o, $(basename $(SOURCES)))

 .F90.o:
    $(FC) -c $(INCLDIR) $(INCS) $(FFLAGS) $(FREEFLAGS)  $<

部分真实编译如下所示:

mpif90 -c -I/dir1/ -I/dir2 ... /dir1/test.F90

在 Srcfiles 中,所有 Fortran 文件的列表为

test.F90
test1.F90
...

还有一个名为 Filepath 的文件将文件目录列为

/dir1/
/dir2/
/dir3/

我提供了与我的问题相关的尽可能多的内容,您能否指出我如何解决我的问题的方向?

4

1 回答 1

2

这个 makefilexxx.o从名为xxx.F90. xxx可以是简单的文件名,也可以是路径名;没关系。

makefile 获取要从文件构建的Srcfiles文件列表(通过cat)。因此,在您Srcfiles列出的文件中/dir1/test.F90,这意味着该OBJS变量将包含/dir1/test.o,然后您要求 make 构建/dir1/test.o它将从源文件编译它/dir1/test.F90

如果你把/dir2/test.F90你的Srcfiles文件,那么它会编译成/dir2/test.o.

于 2013-11-03T22:48:45.857 回答