Проблема сгенерированных зависимостей - PullRequest
0 голосов
/ 05 октября 2019

Я сгенерировал зависимости для своего проекта, используя следующую цель.

Скомпилирована только первая строка сгенерированных зависимостей.

Затем мой основной файл зависит от всех исходных файлов в моемпроект;какие-нибудь идеи?

Мой файл зависимостей сгенерирован так:

rules.d : $(wildcard *.c) $(wildcard *.h)
        gcc -MM $(wildcard *.c) > rules.d

Затем я сделал

-include rules.d

, после чего компилируется только первая сгенерированная зависимость. rules.d содержит, например,

main.o:main.c *.h
a.o=a.c
b.o=b.c
c.o=c.c

У нас есть следующие файлы в проекте

a.h a.c 
b.h b.c 
c.h. c.c

main.c (содержит основную функцию), и все файлы заголовков включены. Я делю свой проект таким образом, так как это обязательно для команды.

Буду признателен за любую помощь.

Ответы [ 2 ]

0 голосов
/ 06 октября 2019

после получения списка всех желаемых файлов зависимостей через:

SRC := $(wildcard *.c)
OBJ := $(SRC:.c=.o)
DEP := $(SRC:.c=.d)    

затем:

rules.d : $(wildcard *.c) $(wildcard *.h)
<tab>gcc -MM $(wildcard *.c) > rules.d

должно быть:

%.d: %.c 
<tab>gcc -MM $< > $@

И затемоператор компиляции должен быть:

%.o: %.c %.d 
<tab>gcc -Wall -Wextra -Wconversion -pedantic -std=gnu11 -c $< -o $@ -I. 

и где-то ближе к концу файла make должен быть:

ifneq "$(MAKECMDGOALS)" "clean"
-include $(DEP)
endif
0 голосов
/ 05 октября 2019

Когда вы говорите , компилируется только первая зависимость , я предполагаю, что вы имеете в виду, что когда вы запускаете make, компилируется только main.o или генерируется rules.d.

Вероятно, потому что вы добавили include rules.d и / или цель для построения rules.d в top вашего make-файла. Он должен быть добавлен в end вашего make-файла.

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

...