У меня есть вопрос начинающего о Makefile. У меня есть очень простой Makefile, содержащий:Makefile не находит правила для объекта
SHELL = /bin/sh
CC = gcc
CFLAGS = -lm -std=c99 -g -o0
EXEC = test
BUILDDIR = build
OBJDIR = obj
SOURCES = $(shell cat sources.list)
DEPS = $(shell cat headers.list)
OBJ = $(SOURCES:.c=.o)
OBJECTS = $(patsubst %,$(OBJDIR)/%,$(OBJ))
all: $(OBJECTS)
$(CC) $(CFLAGS) $(OBJECTS) -o $(BUILDDIR)/$(EXEC)
$(OBJDIR)/%.o: %.c $(DEPS)
$(CC) -c $< -o [email protected]
clean:
rm -f $(BUILDDIR)/$(EXEC) $(OBJDIR)/*.o
Моя проблема, если я пытаюсь использовать этот make-файл для компиляции, он возвращает сообщение об ошибке:
there is no rule for the target obj/Name.o
Что я делаю неправильно?
После первых замечаний и дальнейших исследований я добрался до этой рабочей версии, но это не создает объектные файлы в папке OBJ, так что это не то, что я стремлюсь к
SHELL = /bin/sh
CC = gcc
CFLAGS = -lm -std=c99 -g -o0
EXEC = test
BUILDDIR = build
OBJDIR = obj
SOURCES = $(shell cat sources.list)
DEPS = $(shell cat headers.list)
OBJ = $(SOURCES:.c=.o)
OBJECTS = $(patsubst %,$(OBJDIR)/%,$(OBJ))
all: $(BUILDDIR)/$(EXEC)
$(BUILDDIR)/$(EXEC): $(OBJ)
$(CC) $(CFLAGS) $(OBJ) -o $(BUILDDIR)/$(EXEC)
%.o: %.c $(DEPS)
$(CC) -c $< -o [email protected]
clean:
rm -f $(BUILDDIR)/$(EXEC) $(OBJDIR)/*.o
ли 'Name.c' существует, в каталоге верхнего уровня? –
yes, в противном случае makefile не потребует .o для сборки – Thorsten
Есть ли имя.c в вашем файле 'sources.list'? – jdarthenay