编译过程如何选择正确的源文件?

时间:2013-11-03 22:34:14

标签: compiler-construction makefile mpi

我正在查看Makefile以找出我的问题。我的问题是编译中包含两个目录,其中包含具有完全相同名称的fortran源文件,编译本身如何决定使用哪个源文件。至于我的情况,这两个目录是/ dir1 /和/ dir2 /。两者都有一个名为test.F90文件的fortran文件,两个目录都包含在include目录中。那么为什么编译/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/

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

1 个答案:

答案 0 :(得分:2)

此makefile从名为xxx.o的文件构建名为xxx.F90的文件。 xxx可以是简单的文件名,也可以是路径名;没关系。

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

如果您将/dir1/test.F90放入/dir2/test.F90文件中,则会将其汇总到Srcfiles