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