Как управлять зависимостями файла заголовка C? - PullRequest
1 голос
/ 07 марта 2012

У меня много C-файлов, у некоторых есть заголовок (.h), у некоторых файлов нет.

Вот мой make-файл:

.SUFFIXES: 

SRC := $(wildard ./src/*.c)
OBJ := $(SRC:%.c=%.o)

all: $(OBJ)

%.o: %.c
    $(MyNotGCCCompiler) "@../$(*F).cmd"

Работает нормально, за исключением того, что если я изменяю заголовочный файл, цель не перекомпилируется, потому что не включается в зависимости.

Как мне справиться с этим делом?

Спасибо

Ответы [ 2 ]

2 голосов
/ 07 марта 2012

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

Для первой компиляции не требуется никаких зависимостей, так как каждый исходный файл должен быть скомпилирован. Последующие перекомпиляции загружают зависимости, сгенерированные предыдущей компиляцией, чтобы определить, что нужно перекомпилировать.

Ваш $(MyNotGCCCompiler) может иметь параметр командной строки для создания файла зависимостей.

При использовании gcc работает так:

.SUFFIXES: 

SRC := $(wildard ./src/*.c)
OBJ := $(SRC:%.c=%.o)
DEP := $(OBJ:%.o=%.d)

all: $(OBJ)

# when compiling produce a .d file as well 
%.o: %.c
    gcc -c -o $@ $(CPPFLAGS) $(CFLAGS) -MD -MP -MF ${@:.o=.d} $<

# don't fail on missing .d files
# there won't be any on the first run
-include $(DEP) 
0 голосов
/ 07 марта 2012

(я не уверен, что это не говорит об очевидном, но в любом случае:)

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

Существуют инструменты (например, gcc), которые могут сгенерировать их для вас;если вы не можете использовать или создать такой инструмент, вам нужно будет самостоятельно соблюдать эти правила.

...