В этой же директории есть файл a.c
После отработки make ожидаем c.exe
(Не ищите смысла в этих действиях)
Логика работы:
1. Первое правило определяет как из любого .c файла получить .o
Это правило создаёт файл а.о
Работает
2. Второе правило описывает как из $(OBJS) получить $(EXTRAOBJ)
Т.е. создали .o, теперь на их основе создаём дополнительные .o
В данном случае, как из a.o получaем b.o
Работает
3. Третье правило это попытка описать как получить $(PROG) из $(OBJS) и $(EXTRAOBJ)
В данном случае я ожидаю получить c.exe из а.о и b.o
Не работает
Code: Select all
OBJS = a.o
EXTRAOBJ = b.o
PROG = c.exe
## Creating a.o
%.o : %.c
@echo "## Creating a.o"
@echo $< > $@
## Creating b.o
$(EXTRAOBJ) : $(OBJS)
@echo "## Creating b.o"
@echo $(OBJS) > b.o
## Creating c.exe
$(PROG) : $(OBJS) $(EXTRAOBJ)
@echo "## Creating c.exe"
@echo $(OBJS) $(EXTRAOBJ) > $(PROG)
clean:
$(RM) $(PROG)
$(RM) $(OBJS)
$(RM) $(EXTRAOBJ)
Как описать правило создания $(PROG) после того, как созданы $(OBJS) и $(EXTRAOBJ)
P.S. $(OBJS) и $(EXTRAOBJ) могут содержать несколько файлов.