代码之家  ›  专栏  ›  技术社区  ›  Stéphan Kochen

跳过特定目标的makefile依赖项生成(例如“clean”)

  •  7
  • Stéphan Kochen  · 技术社区  · 15 年前

    我有几个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 去毛 步骤只需执行 clean 但即使这样,也会生成并包含依赖项文件。

    简而言之,我的问题是: 当我只想运行 清洁的

    1 回复  |  直到 15 年前
        1
  •  9
  •   Hasturkun    15 年前

    解决办法很简单,不是吗 -include 在“清除”下生成的文件:

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