使用makefile编译具有不同文件夹中的源文件的程序

时间:2018-08-20 19:10:21

标签: makefile compiler-errors

所以我一直在尝试使用答案和这个已发布问题的想法:Makefile: Compiling from directory to another directory

在下面的摘录代码中,您可以看到源和编译对象的目录定义。

all : Mpois Mkvz MBJ Mlid

# Definitions
COMPILER := gfortran -O3
LIBS := -g -fbounds-check -ffast-math -lm

# Directories of object code
OBJDIR = objects
SRCDIR = src

SOURCES := $(SRCDIR)/lbm_const.f90 $(SRCDIR)/BORDERS.f90 $(SRCDIR)/CONVERGENCE.f90 $(SRCDIR)/FILESIO.f90 $(SRCDIR)/LBM.f90
OBJECTS := $(OBJDIR)/lbm_const.o $(OBJDIR)/BORDERS.o $(OBJDIR)/CONVERGENCE.o $(OBJDIR)/FILESIO.o $(OBJDIR)/LBM.o

SOURCES_pois := $(SRCDIR)/Main_pois.f90
OBJECTS_pois := $(OBJDIR)/Main_pois.o

#   Linking
Mpois: $(OBJECTS) $(OBJECTS_pois)
    $(COMPILER) $^ -o $@ $(LIBS)

#   Compiling
$(OBJECTS): $(OBJDIR)/%.o: %.f90
    $(COMPILER) -c $< -o $@

#   Compiling
$(OBJECTS_pois): $(OBJDIR)/%.o: %.f90
    $(COMPILER) -c $< -o $@

clean:
    rm -f $(OBJDIR)/*.o
    rm -f $(OBJDIR)/*.mod
    rm -f $(SRCDIR)/*.mod

运行makefile脚本时,出现以下错误:

make: *** No rule to make target 'lbm_const.f90', needed by 'objects/lbm_const.o'.  Stop.

有趣的是,请注意,当SRCDIR = src更改为SRCDIR = .时,makefile也会编译,即使文件位于src文件夹中。

0 个答案:

没有答案