-1

私の質問を理解するために Makefile を見ています。私の質問は、コンパイル自体が使用するソースファイルを決定する方法とまったく同じ名前の fortran ソースファイルを持つコンパイルに含まれる 2 つのディレクトリがあることです。私の場合、2 つのディレクトリは /dir1/ と /dir2/ です。どちらにも test.F90 ファイルという名前の Fortran ファイルがあり、両方のディレクトリがインクルード ディレクトリとして含まれています。次に、なぜ /dir2/test.F90 ではなく /dir1/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

xxx.oこのメイクファイルは、 という名前のファイルから という名前のファイルを構築しますxxx.F90xxx単純なファイル名にすることも、パス名にすることもできます。それは問題ではありません。

makefile は、ビルドするファイルのリストをファイルからSrcfiles( 経由でcat) 取得します。つまり、変数に が含まれてSrcfilesいる/dir1/test.F90ことを意味し、make にビルドを依頼すると、ソース ファイルからコンパイルされます。OBJS/dir1/test.o/dir1/test.o/dir1/test.F90

ファイルを入れる/dir2/test.F90Srcfiles、それがコンパイルされて/dir2/test.o.

于 2013-11-03T22:48:45.857 に答える