如果我只更改了一个文件,为什么makefile会重新编译整个文件集?

如果我只更改了一个文件,为什么makefile会重新编译整个文件集?,makefile,Makefile,这是我的makefile。。。为什么它会重新编译所有源,即使只有一个更改 CC = g++ CFLAGS = -w -g -c LIBS = -lm EXEC = DFMS_PDS_L2_to_L3 .PHONY : clean tgz wdtgz HOMEDIR = ../ BIN = bin SRC = src OBJ = obj SRCFILES := $(wildcard $(SRC)/*.cc) OBJFILES := $(patsubst %.cc, $(OBJ)/%.o,

这是我的makefile。。。为什么它会重新编译所有源,即使只有一个更改

CC = g++
CFLAGS = -w -g -c
LIBS = -lm

EXEC = DFMS_PDS_L2_to_L3

.PHONY : clean tgz wdtgz

HOMEDIR = ../
BIN = bin
SRC = src
OBJ = obj

SRCFILES := $(wildcard $(SRC)/*.cc)
OBJFILES := $(patsubst %.cc, $(OBJ)/%.o, $(notdir $(SRCFILES)))
OBJS := $(patsubst %.cc, %.o, $(notdir $(SRCFILES)))

# Executable Targets
all:    $(EXEC)

$(EXEC) : $(OBJS)
$(CC) $(LIBS) $(OBJFILES) -o $(BIN)/$(EXEC)

# Dependencies
%.o: $(SRC)/%.cc
$(CC) $< $(CFLAGS) -o $(OBJ)/$@

# Miscellaneous Targets 
clean:
rm -rf $(BIN)/$(EXEC) obj/*.o *~

tgz:
tar cvzf $(HOMEDIR)cppbuild.tgz $(HOMEDIR)cppbuild --exclude=data
cp $(HOMEDIR)cppbuild.tgz $(HOMEDIR)cppbuild.tgz.allow

wdtgz:
tar cvzf $(HOMEDIR)cppbuild.tgz $(HOMEDIR)cppbuild
cp $(HOMEDIR)cppbuild.tgz $(HOMEDIR)cppbuild.tgz.allow
CC=g++
CFLAGS=-w-g-c
LIBS=-lm
EXEC=DFMS_PDS_L2_至_L3
.冒牌货:干净的tgz wdtgz
HOMEDIR=/
BIN=BIN
SRC=SRC
OBJ=OBJ
SRCFILES:=$(通配符$(SRC)/*.cc)
OBJFILES:=$(patsubst%.cc,$(OBJ)/%.o,$(notdir$(SRCFILES)))
OBJS:=$(patsubst%.cc,%.o,$(notdir$(SRCFILES)))
#可执行目标
全部:$(执行)
$(执行):$(OBJS)
$(CC)$(LIBS)$(OBJFILES)-o$(BIN)/$(EXEC)
#依赖关系
%.o:$(SRC)/%.cc
$(CC)$<$(CFLAGS)-o$(OBJ)/$@
#杂项目标
清洁:
rm-rf$(BIN)/$(EXEC)obj/*.o*~
tgz:
tar cvzf$(HOMEDIR)cppbuild.tgz$(HOMEDIR)cppbuild--exclude=data
cp$(HOMEDIR)cppbuild.tgz$(HOMEDIR)cppbuild.tgz.allow
wdtgz:
tar cvzf$(HOMEDIR)cppbuild.tgz$(HOMEDIR)cppbuild
cp$(HOMEDIR)cppbuild.tgz$(HOMEDIR)cppbuild.tgz.allow
我使用gnu make在Linux 3.0上运行


它是否在$(EXEC)定义中?

我的猜测是,即使没有任何更改,它也会重新编译所有源代码

看看这两条规则:

$(EXEC) : $(OBJS)
$(CC) $(LIBS) $(OBJFILES) -o $(BIN)/$(EXEC)

%.o: $(SRC)/%.cc
$(CC) $< $(CFLAGS) -o $(OBJ)/$@

我猜想这会重新编译所有的源代码,即使没有任何更改

看看这两条规则:

$(EXEC) : $(OBJS)
$(CC) $(LIBS) $(OBJFILES) -o $(BIN)/$(EXEC)

%.o: $(SRC)/%.cc
$(CC) $< $(CFLAGS) -o $(OBJ)/$@