【问题标题】:Skip makefile dependency generation for certain targets (e.g. `clean`)跳过某些目标的 makefile 依赖项生成(例如 `clean`)
【发布时间】:2011-02-15 22:08:58
【问题描述】:

我有几个 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 生成依赖项?

【问题讨论】:

    标签: makefile dependencies debian gnu-make


    【解决方案1】:

    解决方法很简单,不要-include清理下生成的文件:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-07
      • 1970-01-01
      • 1970-01-01
      • 2018-04-13
      • 1970-01-01
      • 2023-04-11
      • 2012-02-08
      • 2013-06-05
      相关资源
      最近更新 更多