2016-08-10 3 views
0

У меня есть проект с кучей исходного файла, некоторые из них (но не все) должны быть перестроены после изменения одного определенного файла * .h (currtype.h). У меня есть явное правило для этого в моем Makefile:GNU Сделать игнорировать все правила, кроме первых

%.obj: %.c 
    $(COMPILE) 

main.obj: main.c currtype.h 
    $(COMPILE) 
CustomHTTPApp.obj: CustomHTTPApp.c currtype.h 
    $(COMPILE) 
CustomSNMPApp.obj: CustomSNMPApp.c currtype.h 
    $(COMPILE) 

COMPILE = -"$(CC)" -C $< $(CFLAGS) $(INCLUDE_STACK) 

Но чем я изменить currtype.h я вижу только main.c перекомпиляции. Если я поместил CustomHTTPApp в первую строку и main.c на второй, то только CustomHTTPApp будет перекомпилирован и т. Д. Как это можно исправить?

+0

Не могли бы вы предоставить свою командную строку при вызове 'make'? Также платформа и какая она? – amn

+0

Я просто набираю make в своей оболочке Win64 Shell MinGW-w64 (я запускаю Windows 8.1). – Keroronsk

+0

Кстати, несмотря на эту проблему с проверкой dependecy, проект строится правильно. – Keroronsk

ответ

3

Если вы только что запустили команду «make», выполняется первое неявное правило, которое просто строит main.obj. Вам нужно добавить еще одно целевое здание для всех выходных файлов, например. «все»:

all: main.obj CustomHTTPApp.obj CustomSNMPApp.obj 

%.obj: %.c 
    $(COMPILE) 

main.obj: main.c currtype.h 
    $(COMPILE) 
CustomHTTPApp.obj: CustomHTTPApp.c currtype.h 
    $(COMPILE) 
CustomSNMPApp.obj: CustomSNMPApp.c currtype.h 
    $(COMPILE) 

COMPILE = "$(CC)" -C $< $(CFLAGS) $(INCLUDE_STACK) 
+0

Спасибо, теперь это имеет смысл. Думаю, дело закрыто. – Keroronsk

Смежные вопросы