如何使用源文件和二进制文件的子目录创建makefile

时间:2016-04-26 13:17:10

标签: unix makefile directory fortran gfortran

我正在尝试在子目录中创建一个包含源文件(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 

0 个答案:

没有答案