|
本帖最后由 静待花开 于 2023-8-8 15:56 编辑
这是我在楼主基础上修改后的。就是想做得更通用一点,不需要用户在makefile里面输入源代码文件名(如原makefile第8、第9行)。思路是:把module文件的后缀都改为.module,一个module写在一个.module文件中,并且文件名与module名称完全一样。但make之后,生成的*.mod文件除了输出到mod文件夹内,还输出在了makefile所在的目录(即与makefile放在一起),能编译成功,但多了这些.mod文件,还需要在删除。试了好多办法,实在想不到更好办法,想请版主看看是什么问题。楼主看到的话,也请指点一下。
下面是我改后makefile文件。
#!/bin/bash
# 设置文件路径
SRCDIR = src
OBJDIR = obj
MODDIR = mod
BINDIR = bin
# 文件
SRC = $(wildcard $(SRCDIR)/*.f90)
OBJ = $(addprefix $(OBJDIR)/, $(patsubst %.f90,%.o,$(notdir $(SRC))))
MODSRC = $(wildcard $(SRCDIR)/*.module)
MODOBJ = $(addprefix $(OBJDIR)/, $(patsubst %.module,%.o,$(notdir $(MODSRC))))
MOD = $(addprefix $(MODDIR)/, $(patsubst %.module,%.mod,$(notdir $(MODSRC))))
# 编译器相关设置
FC = gfortran
FF = -cpp -O0 -g -fbacktrace
DF = -DDOUBLE_PRECISION
EXE = myPro
# 所有目标
all: $(OBJDIR)/depend binary
# 依赖关系
include $(OBJDIR)/depend
# 链接
binary: $(OBJ) $(MODOBJ)
$(FC) $(FF) $(DF) -J$(MODDIR) $(OBJ) $(MODOBJ) -o $(BINDIR)/$(EXE)
# 编译
$(OBJ): $(SRC) $(MOD)
$(FC) $(FF) $(DF) -J$(MODDIR) -c $< -o $@
$(OBJDIR)/%.o: $(SRCDIR)/%.module
$(FC) -c -cpp -x f95 $< -o $@
$(MODDIR)/%.mod: $(SRCDIR)/%.module
$(FC) -c -cpp -x f95 $< -o $@
# 检查路径,并生成依赖关系
.PONHY: $(OBJDIR)/depend
$(OBJDIR)/depend:
@if test -d $(SRCDIR); then echo "# directory "$(SRCDIR) "exists"; else mkdir $(SRCDIR); fi
@if test -d $(OBJDIR); then echo "# directory "$(OBJDIR) "exists"; else mkdir $(OBJDIR); fi
@if test -d $(MODDIR); then echo "# directory "$(MODDIR) "exists"; else mkdir $(MODDIR); fi
@if test -d $(BINDIR); then echo "# directory "$(BINDIR) "exists"; else mkdir $(BINDIR); fi
makedepf90 -b $(OBJDIR) $(SRCS) > $(OBJDIR)/depend
clean-all:
rm -rf $(OBJDIR)/depend *.o *.mod $(MOD) $(MODOBJ) $(OBJ) $(BINDIR)/$(EXE)
MakefileFortProject_2.rar
(2.25 KB, 下载次数: 5)
|
|