Makefile, который делает объектные файлы в разных каталогах - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь упорядочить файлы своего проекта, так как все они находятся в каталоге root, и изменить Makefile, так как он слишком длинный и очень повторяющийся. Поэтому я создаю следующие 3 директории:

  • include: содержит все файлы .h
  • sr c: содержит все файлы. c
  • obj: на данный момент он пуст, но после компиляции он будет содержать все файлы .o

Поэтому моей первой целью было создать файлы .o и поместить их в / obj каталог и созданный мной Makefile:

#paths
INCLUDE = include
SOURCE = src
OBJS = obj

# compiler
CC = gcc

#flags
CFLAGS = -Wall -g -pedantic -I$(INCLUDE)
VFLAGS = --leak-check=full -v

OB = $(OBJS)/space.o $(OBJS)/command.o $(OBJS)/screen.o $(OBJS)/graphic_engine.o $(OBJS)/game.o $(OBJS)/object.o $(OBJS)/player.o $(OBJS)/game_reader.o $(OBJS)/die.o $(OBJS)/set.o $(OBJS)/inventory.o $(OBJS)/link.o $(OBJS)/game_loop.o

build: $(OB)

$(OBJS)/%.o: $(SOURCE)/%.c $(INCLUDE)/%.h
    $(CC) -c $< $(CFLAGS) -o $@

Когда я запускаю его, все .o файлы создаются и помещаются в каталог obj, но последний, и я получаю следующую ошибку:
make: *** No rule to make target 'obj/game_loop.o', needed by 'build'. Stop.

В переменной OB я изменил положение game_l oop и заметил, что были созданы предыдущие файлы .o, и компиляция снова остановилась в файле game_l oop.

Я хочу помочь преодолеть эту ошибку и помочь продолжить создание Makefile

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...