Ich versuche, ein Makefile für mein Projekt zu erstellen, aber ich scheinen einige Fehler zu begegnen, wie ich neue Dinge teste. Meine Dateistruktur ist als solche:Fehler beim Ausführen make
~/main #root project folder
~/main/include #header files (mostly class headers)
~/main/src #source files
~/main/src/obj #object files
Makefile
(Makefile ist im Stammordner des Projekts)
Makefile:
CC=g++
IDIR=include
SDIR=src
ODIR=src/obj
DEPS=$(IDIR)/%.h
OBJS=$(ODIR)/%.o
SRCS=$(SDIR)/%.cpp
CFLAGS=-Wall -std=c++11 -I$(IDIR)
$(OBJS): $(SRCS) $(DEPS)
$(CC) -c -o [email protected] $< $(CFLAGS)
all: $(OBJS)
gcc -o run $^ $(CFLAGS)
.PHONY: clean
clean:
rm -f $(OBJS)
Für Testzwecke Ich habe eine einzige main.cpp
in src
Ordner und eine zufällige Header-Datei in include
Ordner. Der Fehler, den ich immer bin, wenn der einfachen make
Befehl ausgeführt ist folgende:
make: *** No rule to make target `src/obj/%.o', needed by `all'. Stop.
EDIT: Mit Hilfe der Jungs unter i mit der Lösung kam
CC=g++
IDIR=include
SDIR=src
ODIR=src/obj
CFLAGS=-Wall -std=c++11 -I$(IDIR)
_DEPS = yo.h
DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS))
_OBJ = main.o
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))
_SRC = main.cpp
SRC = $(patsubst %,$(SDIR)/%,$(_SRC))
$(ODIR)/%.o: $(SRC) $(DEPS)
$(CC) -c -o [email protected] $< $(CFLAGS)
all: $(OBJ)
$(CC) -o run $^ $(CFLAGS) $(LIBS)
.PHONY: clean
clean:
rm -f $(OBJS)
schön scheint zu arbeiten! wird es markieren, wenn ich richtig teste – LeFrillo
Okay kompiliert gut, obwohl es scheint, dass es die O-Dateien nicht unter dem Ordner "obj" platziert. Kann das aus dem Makefile selbst gemacht werden, oder sollte ich es manuell machen? – LeFrillo
@LeFrillo Huh? Wo platziert es sie? – Barry