Ich habe eine Anfängerfrage zu einem Makefile. Ich habe eine sehr einfache Make-Datei enthält:Makefile findet keine Regel für Objekt
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
Mein Problem ist, wenn ich versuche, dieses Makefile zu verwenden, um zu kompilieren, es gibt die Fehlermeldung:
there is no rule for the target obj/Name.o
Was mache ich falsch?
Nach den ersten paar Kommentare und weitere Forschung, die ich auf diese Arbeits Version bekam, aber es schafft nicht die Objektdateien im obj Ordner, so ist es nicht, was ich wollen für
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
Ist 'Name.c' existiert, in dem Top-Level-Verzeichnis? –
ja, sonst würde das Makefile das .o nicht erfordern – Thorsten
Gibt es name.c in Ihrer 'sources.list' Datei? – jdarthenay