以下は、私のプロジェクトのディレクトリ構造です。
expt-main
---------
Makefile_main
/ \
subdir-1 subdir-2
-------- --------
Makefile_1 Makefile_2
mod_codeA.f90 mod_code1.f90
mod_codeB.f90 mod_code2.f90
mod_codeC.f90 mod_code3.f90
Makefile_main:
export
SHELL = /bin/sh
F90 = mpxlf95
SRCDIRS = $(subdir-1) $(subdir-2)
all:
@for DIR in ${SRCDIRS} ;
do \
back=`pwd`; \
cd $$DIR ;\
$(MAKE) ; status=$$? ; \
if [ $$status != 0 ] ; then \
echo "Exit status fro make was $$status" ; exit $$status ; \
fi ; \
cd $$back ; \
done
-------------------------------------------------------------------------------
Makefile-1:
%.o: %.f90
$(F90) $(F90FLAGS) -I$(subdir-2) -c $<
mod_codeA.o: mod_codeC.o $(subdir-2)/mod_code2.o
-------------------------------------------------------------------------------
Makefile-2:
PROG = $(exec)
subdir-1_objs = $(subdir-1)/mod_codeA.o mod_codeB.o mod_codeC.o
all: $(PROG)
$(PROG): $(subdir-2_objs) $(subdir-1_objs) -o $@ $(subdir-2_objs) $(subdir-1_objs)
---------------------------------------------------------------------------------
-
最初に subdir-1 のコード (モジュール) をコンパイルし、次に subdir-2 のコード (モジュール) をコンパイルし、最後に実行可能ファイルを作成するように Makefile_main を作成しました。問題: subdir-1 のモジュールは subdir-2 のモジュールを使用し、同様に、subdir-2 のモジュールは subdir-1 のモジュールを使用します。使用中のモジュールが別のディレクトリにあるため、make が失敗します。この問題に対処するメイクファイルの書き方、つまり、サブディレクトリ 1 でモジュールをコンパイルしているときに、サブディレクトリ 2 からのオブジェクト ファイルが必要になるたびに、サブディレクトリ 2 に切り替えて必要なモジュールをコンパイルし、リターンする必要があります。さらなるアクションのためにサブディレクトリ-1に戻りますか?