Я пытаюсь упорядочить файлы своего проекта, так как все они находятся в каталоге 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