/ / Posiadanie związanego z makefile koszmaru - makefile

Mając koszmar związany z plikiem makefile - makefile

Jeśli spróbuję make all, Dostaję:

make: ***No rule to make target "srcSOURCES", needed by "all". Stop.

Jeśli spróbuję make qwark, Dostaję:

make: ***No rule to make target "objsrcSOURCES" needed by "qwark". Stop.

Jeśli spróbuję make qwark.o, Dostaję

Fatal error: can"t create objqwark.o: No such file or directory
make: *** [qwark.o] Error 1

Oto mój kod źródłowy dla przyjemności oglądania ...

COMPILER := g++
CFLAGS :=
LDFLAGS :=
SOURCES := quark.cc
SOURCES := $(addprefix src,SOURCES)
OBJECTS := $(addprefix obj,$($(notdir SOURCES):.cc=.o))
EXECUTABLE := qwark.exe
DEBUG := bindebug$(EXECUTABLE)
NORMAL := binrelease$(EXECUTABLE)

all: $(SOURCES) $(EXECUTABLE)

release: qwark
normal: qwark

qwark: $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@

qwark.o: srcqwark.cc
$(CC) $(CFLAGS) -c srcqwark.cc -o objqwark.o

%.o: src%.cc
$(CC) $(CFLAGS) -c $(input) -o obj$(output)

Proszę, proszę, powiedz mi, co robię źle ...

Odpowiedzi:

4 dla odpowiedzi № 1

Zmieniasz literał SOURCES słowo, zamiast odpowiadającej wartości zmiennej. Spróbuj wykonać następujące czynności:

SOURCES := quark.cc

SOURCES := $(addprefix src,$(SOURCES))
OBJECTS := $(addprefix obj,$(patsubst %.cc,%.o,$(notdir $(SOURCES))))

Lub, znacznie prostsze:

SOURCES := quark.cc

OBJECTS := $(SOURCES:%.cc=obj%.o)
SOURCES := $(SOURCES:%=src%)

2 dla odpowiedzi nr 2

Rozwiń zmienną SOURCES, gdy jest włączona w rhs?

SOURCES := $(addprefix src,$(SOURCES))
OBJECTS := $(addprefix obj,$($(notdir $(SOURCES)):.cc=.o))