Пропустить генерацию зависимостей make-файла для определенных целей (например, `clean`) - PullRequest
7 голосов
/ 05 мая 2010

У меня есть несколько проектов на C и C ++, которые следуют базовой структуре, которую я использовал некоторое время назад. Мои исходные файлы находятся в src/*.c, промежуточные файлы в obj/*.[do], а фактический исполняемый файл - в каталоге верхнего уровня.

Мои make-файлы следуют примерно этому шаблону:

# 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?

1 Ответ

9 голосов
/ 05 мая 2010

Решение простое, не -include генерирует файлы под чистым:

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