Fortran:包含多个目录的makefile

时间:2015-05-25 23:05:28

标签: makefile dependencies fortran gfortran

我有一个像这样的大型fortran项目:

项目

| - \ bin中

| - \ OBJ

| - \ SRC

| - \ FORTRAN

| --- \共同

| --- \前原

我正在尝试构建类似this one:

的makefile
F90 = 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文件夹中并从那里链接程序?

0 个答案:

没有答案