我有几个C和C ++项目都遵循我已经使用了一段时间的基本结构。我的源文件位于src/*.c
,obj/*.[do]
中的中间文件和顶级目录中的实际可执行文件。
我的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)
现在我正处于为Debian系统打包的地步。我正在使用debuild
来构建Debian源包,并使用pbuilder
来构建二进制包。 debuild
步骤只需执行clean
目标,但即使这样也会生成并包含依赖项文件。
简而言之,我的问题是:当我想要的只是运行clean
目标时,我能否以某种方式阻止make生成依赖项?
答案 0 :(得分:9)
解决方案很简单,不要在-include
下生成干净的文件:
ifneq ($(MAKECMDGOALS),clean)
-include $(DEPFILES)
endif