我有几个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
目标,但即使这样也会生成并包含依赖项文件.
简而言之,我的问题是:我可以以某种方式阻止make生成依赖项,而我想要的只是运行clean
目标吗?
解决方案很简单,不要-include
在clean下生成文件:
ifneq ($(MAKECMDGOALS),clean) -include $(DEPFILES) endif