跳过特定目标的makefile依赖项生成(例如“clean”) 我有几个C和C++项目,它们都遵循了我使用了一段时间的基本结构。我的源文件位于src/*.c中,中间文件位于obj/*.[do]中,实际可执行文件位于顶层目录中

跳过特定目标的makefile依赖项生成(例如“clean”) 我有几个C和C++项目,它们都遵循了我使用了一段时间的基本结构。我的源文件位于src/*.c中,中间文件位于obj/*.[do]中,实际可执行文件位于顶层目录中,makefile,dependencies,debian,gnu-make,Makefile,Dependencies,Debian,Gnu Make,我的makefile大致遵循以下模板: # The final executable TARGET := something # Source files (without src/) INPUTS := foo.c bar.c baz.c # OBJECTS will contain: obj/foo.o obj/bar.o obj/baz.o OBJECTS := $(INPUTS:%.cpp=obj/%.o) # DEPFILES will contain: obj/foo.d obj/

我的makefile大致遵循以下模板:

# The final executable
TARGET := something
# Source files (without src/)
INPUTS := foo.c bar.c baz.c

# OBJECTS will contain: obj/foo.o obj/bar.o obj/baz.o
OBJECTS := $(INPUTS:%.cpp=obj/%.o)
# DEPFILES will contain: obj/foo.d obj/bar.d obj/baz.d
DEPFILES := $(OBJECTS:%.o=%.d)

all: $(TARGET)

obj/%.o: src/%.cpp
    $(CC) $(CFLAGS) -c -o $@ $<

obj/%.d: src/%.cpp
    $(CC) $(CFLAGS) -M -MF $@ -MT $(@:%.d=%.o) $<

$(TARGET): $(OBJECTS)
    $(LD) $(LDFLAGS) -o $@ $(OBJECTS)

.PHONY: clean
clean:
    -rm -f $(OBJECTS) $(DEPFILES) $(RPOFILES) $(TARGET)

-include $(DEPFILES)
#最终可执行文件
目标:=某物
#源文件(不带src/)
输入:=foo.c bar.c baz.c
#对象将包含:obj/foo.o obj/bar.o obj/baz.o
对象:=$(输入:%.cpp=obj/%.o)
#DEP文件将包含:obj/foo.d obj/bar.d obj/baz.d
DEPFILES:=$(对象:%.o=%.d)
全部:$(目标)
obj/%.o:src/%.cpp
$(CC)$(CFLAGS)-c-o$@$<
obj/%.d:src/%.cpp
$(CC)$(CFLAGS)-M-MF$@-MT$(@:%.d=%.o)$<
$(目标):$(对象)
$(LD)$(LDFLAGS)-o$@$(对象)
.假冒:干净
清洁:
-rm-f$(对象)$(DEPFILES)$(RPOFILES)$(目标)
-包括$(数据文件)
现在,我正在为Debian系统打包这个。我正在使用
debuild
构建Debian源代码包,使用
pbuilder
构建二进制软件包。
debild
步骤只需执行
clean
目标,但即使这样,也会生成并包含依赖项文件


简而言之,我的问题是:当我只想运行
clean
目标时,我是否可以阻止make生成依赖项?

解决方案很简单,不要
-将生成的文件包含在clean下:

ifneq ($(MAKECMDGOALS),clean)
    -include $(DEPFILES)
endif