LINUX.ORG.RU

еще один вопрос по make (генерация зависисмостей)

 ,


0

2

В общем есть такой makefile

PROG := awesome-prog
SOURCES := $(wildcard *.c)
OBJECTS := $(patsubst %c,%o,$(SOURCES))
DEPFILES := $(patsubst %.c,%.d,$(SOURCES))

$(PROG): $(OBJECTS)
        $(CC) $(LDFLAGS) -o $@ $^

%.o: %.d

%.d: %.c
        $(CC) $(CFLAGS) -MM -MT '$(patsubst %.c,%.o,$<)' $< -MF $@
        
ifeq (0, $(words $(findstring $(MAKECMDGOALS), clean print_vars cleanall)))
include $(DEPFILES)
endif

.PHONY: all
all:
        $(MAKE) $(PROG)
Вроде все работает как надо, программу собирает, но при первом запуске, говорит, что нет *.d файлов, как заставить make делать include только после того, как *.d файлы будут созданы?

★★★

Последнее исправление: IvanR (всего исправлений: 1)
Ответ на: комментарий от staseg

-include просто подавляет вывод об ошибке, пробовал инклюдить из отдельного make файла, но не получилось и потом слишком уродливо.

IvanR ★★★
() автор топика
Ответ на: комментарий от IvanR

Я не вижу смысла в этом, если ты не завязываешь отдельную логику на отсутствующие файлы. Очевидно, в таком случае тебе нужно отфильтровать существующие dep-файлы, я знаю такой способ: $(wildcards ${DEPS}). То есть должно получиться что-то вроде:

...
EDEPS=$(wildcard ${DEPS})
ifneq (0, $(words ${EDEPS}))
include ${EDEPS}
endif
...

Но, повторюсь, смысла в этом нет.

staseg ★★★★★
()
Ответ на: комментарий от staseg

Но, повторюсь, смысла в этом нет.

в общем да, спасибо.

IvanR ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.