我正在尝试在子目录中创建一个包含源文件(src)和二进制文件(bin)的父目录中的makefile。
现在我收到了错误:
Makefile:27:警告:覆盖目标`bin'
的配方Makefile:24:警告:忽略目标`bin'
的旧配方Makefile:26:***混合隐式和普通规则。停止。
我是makefile的初学者,所以让我试着按照我的理解引导你完成文件:
首先,使用标志给出编译器选项。此外,每个子目录都有一个标志。 接下来,定义要链接的文件。 pp被定义为调用' make'时的默认程序。 $(BINDIR)被赋予特定命令(打开子文件夹' bin')。 二进制文件是在子文件夹“bin”中创建的。使用来自' src'的源文件。 最后,给出了删除所有已创建文件的一些规则。
我错过了什么吗?
# Compiler Options
FC = f95
FFLAGS = -O3 -w
LDFLAGS = -lfftw3
SRCDIR = src
BINDIR = bin
# Object files
OBJS = $(BINDIR)/modules.o $(BINDIR)/subroutines.o\
$(BINDIR)/adiabatic.o $(BINDIR)/prop.o\
$(BINDIR)/setpot.o $(BINDIR)/prep_prop.o\
$(BINDIR)/rk4.o $(BINDIR)/main.o
# Build rules
default: pp
pp: $(OBJS)
$(FC) *.o $(FFLAGS) $(LDFLAGS) -o pp
$(BINDIR):
mkdir -p $(BINDIR)
$(BINDIR)/%.o: $(SRCDIR)/%.f90 | $(BINDIR)
$(FC) $(FFLAGS) -c $^ -o $@ -J$(BINDIR)
# Clean rules
clean:
rm -f *.o
rm -f *.mod
rm -f pp