У меня есть проект C, который имеет следующую файловую структуру:
Makefile
src
|-utils
| |--vic.c
| |--vic.h
|-mod
| |--type.c
| |--type.h
|-bb.c
|-bb.h
|-main.c
Итак, в корневом каталоге у меня есть фактический Makefile
и каталог src
, который включает в себя исходные файлы. Внутри каталога src
есть несколько файлов .c
и .h
вместе с файлом main.c
, а также есть другие каталоги, которые также содержат другие файлы .c
и .h
. Обратите внимание, что приведенная выше файловая структура сокращена для краткости. Я хочу создать Makefile
, который будет автоматически компилировать все и генерировать исполняемую программу main
, а также удалять объектные файлы, сгенерированные во время компиляции. В настоящее время у меня есть что-то вроде этого:
CC=gcc
CFLAGS=
RM=rm -rf
OUT=main
SRC=src
OBJ=obj
SOURCES=$(wildcard $(SRC)/*.c)
OBJECTS=$(patsubst $(SRC)/%.c, $(OBJ)/%.o, $(SOURCES))
all: build
build: $(OBJECTS)
$(CC) $(CFLAGS) $^ -o $@
$(RM) $(OBJ)
$(OBJ)/%.o: $(SRC)/%.c
$(CC) $(CFLAGS) -I$(SRC) -c $< -o $@
debug: CFLAGS+=-DDEBUG
debug: build
.PHONY: clean
clean:
$(RM) $(OBJ) $(OUT)
Но, похоже, это работает не так, как ожидалось, так как когда я выполняю команду make
, она возвращает следующее сообщение об ошибке:
Сообщения ассемблера: неустранимая ошибка: невозможно создать obj / main.o: такого файла нет
или каталог
Есть идеи, как добиться того, чего я хочу?