我正在查看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/
我尽可能多地提供与我的问题相关的内容,你能指出方向我该如何解决我的问题?
答案 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
。