本帖最后由 Jackdaw 于 2020-9-2 20:12 编辑
上次写了一篇《Makefile 项目管理》,感觉意犹未尽,现在重新写了一个新的
此次更新内容包括:
1. 文件分类存放
2. 自动生成依赖关系
依赖:
makedepf90
Makefile:
[Make] 纯文本查看 复制代码 #!/bin/bash
# 设置文件路径
SRCDIR = src
OBJDIR = obj
MODDIR = mod
BINDIR = bin
# 文件
SRC = floatPrecision.f90 GE_MPC.f90
SRC := $(SRC) main.f90
OBJ = $(SRC:.f90=.o)
# 增加前缀
SRCS = $(addprefix $(SRCDIR)/, $(SRC))
OBJS = $(addprefix $(OBJDIR)/, $(OBJ))
# 编译器相关设置
FC = gfortran
FF = -cpp -O0 -g -fbacktrace
DF = -DDOUBLE_PRECISION
EXE = myPro
# 所有目标
all: $(OBJDIR)/depend $(OBJS) binary
# 依赖关系
include $(OBJDIR)/depend
# 链接
binary: $(OBJS)
$(FC) $(FF) $(DF) -J$(MODDIR) $(OBJS) -o $(BINDIR)/$(EXE)
# 编译
$(OBJS):
$(FC) $(FF) $(DF) -J$(MODDIR) -c $< -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
# 清理工程
.PONHY: clean
clean :
rm -rf $(OBJDIR)/depend $(MODDIR)/*.mod $(OBJS) $(BINDIR)/$(EXE)
下面看看执行结果(测试代码见附件):
package.zip
(3.26 KB, 下载次数: 35)
|