Fortran Makefile错误和问题

时间:2017-01-26 05:39:13

标签: makefile fortran

我正在尝试为Fortran代码创建自己的Makefile。它看起来非常类似于另一个Makefile,它可以完美地工作。但不幸的是,我无法找出自己的错误。配置如下所述:

我有一个主文件夹,包含子文件夹名src,lib,results,mod,obj。 Makefile本身也在主文件夹中。我在src文件夹中有几个fortran源文件,比如main.f90,subroutine_1.f90,subroutine_2.f90,module_1.f90和module_2.f90。子程序_1和子程序_2包含在module_1中,module_2也包含在module_1中。在这种情况下,我只需要将main.f90和module _ * .f90包含在我的Makefile中(如果没有错)。我还有一个静态库供你使用。

# For WINDOWS
RM          :=  del
PS          :=  $(strip \)

#--------------------- DICTIONARY ---------------------
BUILD_DIR   :=  .       
SRC_DIR     :=  $(BUILD_DIR)$(PS)src
LIB_DIR     :=  -L$(BUILD_DIR)$(PS)lib
TAR_DIR     :=  $(BUILD_DIR)$(PS)results
MOD_DIR     :=  $(BUILD_DIR)$(PS)mod
OBJ_DIR     :=  $(BUILD_DIR)$(PS)obj

#------------------ COMPILER AND FLAG ------------------
FC          :=  gfortran
FCFLAGS     := -g -c -fbacktrace -fno-align-commons -fbounds-check\
                -J"$(MOD_DIR)"
FLFLAGS     :=

#------------------- TARGET & SOURCE--------------------
TARGET      :=  $(TAR_DIR)$(PS)main.exe
SRC         :=  $(notdir $(wildcard $(SRC_DIR)$(PS)module_*.f90))\
                main.f90
LIB         :=  -lfftw3-3.lib
LDFLAGS     :=  $(LIB_DIR)   
OBJ         :=  $(patsubst %.f90, $(OBJ_DIR)$(PS)%.o, $(notdir $(SRC)))

all:    $(TARGET)
# Final linking
$(TARGET):  $(OBJ)
    $(FC) $(FLFLAGS) -o $@ $(OBJ) $(LDFLAGS) $(LIB)   #line a

$(OBJ_DIR)$(PS)%.o: $(SRC_DIR)$(PS)%.f90
    $(FC) $(FCFLAGS) -o $@ $<                         #line b

clean:   
    -$(RM) -f $(OBJ_DIR)$(PS)*.o
    -$(RM) -f $(MOD_DIR)$(PS)*.mod

我从制作过程中得到了很多错误,但我想它们都来自同一个地方。

$ make
Makefile:line a: warning: overriding recipe for target '.'
Makefile:line b: warning: ignoring old recipe for target '.'
make: Circular . <- . dependency dropped.
make: *** No rule to make target 'src\%.f90', needed by '.'.  Stop.

除错误外,我还有几个问题:

  1. 如何选择合适的标志进行编译?

  2. 由于module_1在module_1中使用,我是否需要按顺序编译它们?实际上我有很多模块,所以我认为我无法逐一指定......

  3. 我什么时候需要创建依赖.d文件?我不太清楚它是如何工作的。

  4. 我是否需要从.o编译.mod?例如,添加一条线 %.mod:%。o

  5. 非常感谢。

0 个答案:

没有答案