Makefile 使仅识别更改的对象

Makefile 使仅识别更改的对象,makefile,Makefile,我有点困惑。我有一个makefile来根据一些对象创建目标。如果我更改其中一个对象并再次运行makefile,则只对更改的对象进行链接。这当然会导致错误。我确信发生了这个错误,因为我的makefile不够清晰。有人能告诉我怎么了吗? 我想应该告诉make,只编译指定的对象,但是我需要像循环这样的东西来创建对象。。。我不知道 生成文件: F90=gfortran SRCF=./src OBJF=./objs MODF=./mods BINF=./bin SOURCES=dep.f90 main

我有点困惑。我有一个makefile来根据一些对象创建目标。如果我更改其中一个对象并再次运行makefile,则只对更改的对象进行链接。这当然会导致错误。我确信发生了这个错误,因为我的makefile不够清晰。有人能告诉我怎么了吗? 我想应该告诉make,只编译指定的对象,但是我需要像循环这样的东西来创建对象。。。我不知道

生成文件:

F90=gfortran

SRCF=./src
OBJF=./objs
MODF=./mods
BINF=./bin

SOURCES=dep.f90 main.f90
OBJECTS=$(addprefix $(OBJF)/,$(addsuffix .o,$(basename $(SOURCES))))
MODULES=$(addprefix $(MODF)/,*.mod)
TARGET=main

$(BINF)/$(TARGET): $(OBJECTS)
    $(F90) -o$@ $? -J$(MODF) -I$(MODF)

clean :
    rm $(OBJECTS) $(MODULES) $(BINF)/$(TARGET)

$(OBJF)/%.o: $(SRCF)/%.f90
    $(F90) $(F90FLAGS) $(LDFLAGS) -c $< -o $@ -J$(MODF) -I$(MODF)
两个示例文件: main.f90:

program test

use dep
implicit none
real::a,b,c

a=1e0
b=2e0

c=summe(a,b)

print*,c

end program
副f90

module dep
implicit none

contains

function summe(a,b) result(c)
real::a,b,c

c=a+b

end function summe
end module dep

这就是
$?
变量的含义:它只扩展到已更改的先决条件。编写规则以使用扩展到所有先决条件的
$^

$(BINF)/$(TARGET): $(OBJECTS)
        $(F90) -o$@ $^ -J$(MODF) -I$(MODF)
有关详细信息,请参阅

$(BINF)/$(TARGET): $(OBJECTS)
        $(F90) -o$@ $^ -J$(MODF) -I$(MODF)