我有一个像这样的大型fortran项目:
项目
| - \ bin中
| - \ OBJ
| - \ SRC
| - \ FORTRAN
| --- \共同
| --- \前原
我正在尝试构建类似this one:
的makefileF90 = gfortran
FFLAGS = -O3
VPATH = modules:interfaces:subroutines
SRCOBJ = $(wildcard modules/*f90)
MODOBJ = $(SRCOBJ:.f90=.o)
your_executable: $(MODOBJ) main.o
$(F90) main.o -o your_executable
%.o:%.f90
$(F90) $(FFLAGS) -c $^ -o $@
位于bin目录中。现在我想出了这个:
FC = gfortran
FFLAGS = -O3
VPATH = ../src/fortran/common:../src/fortran/prePro:
SRCOBJ = $(wildcard ../src/fortran/common/*.f90) $(wildcard ../src/fortran/prePro/*.f90)
MODOBJ = $(SRCOBJ:.f90=.o)
all: prePro
prePro: $(MODOBJ) prePro.o
$(FC) prePro.o -o prePro
%.o %.mod:%.f90
$(FC) $(FFLAGS) -c $^ -o $@
然而,这不起作用,因为我的大多数文件都是模块,它们彼此依赖。 手动添加依赖项可以解决问题,即:
../src/fortran/common/common_routines.o: ../src/fortran/common/types.o ../src/fortran/common/global.o
../src/fortran/common/global.o: ../src/fortran/common/types.o
etc...
是否有更简单(更短)的方法来解决依赖性问题?
奖金问题:如何将对象和模块放在obj文件夹中并从那里链接程序?