与makefile相关的噩梦

与makefile相关的噩梦,makefile,Makefile,如果我尝试“全部生成”,我会得到: make: ***No rule to make target 'src\SOURCES', needed by 'all'. Stop. make: ***No rule to make target 'obj\src\SOURCES' needed by 'qwark'. Stop. 如果我尝试制作qwark,我会得到: make: ***No rule to make target 'src\SOURCES', needed by 'all'. St

如果我尝试“全部生成”,我会得到:

make: ***No rule to make target 'src\SOURCES', needed by 'all'. Stop.
make: ***No rule to make target 'obj\src\SOURCES' needed by 'qwark'. Stop.
如果我尝试制作qwark,我会得到:

make: ***No rule to make target 'src\SOURCES', needed by 'all'. Stop.
make: ***No rule to make target 'obj\src\SOURCES' needed by 'qwark'. Stop.
如果我尝试
制作qwark.o
,我会

Fatal error: can't create obj\qwark.o: No such file or directory
make: *** [qwark.o] Error 1
这是我的源代码,供您查看

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

all: $(SOURCES) $(EXECUTABLE)

release: qwark
normal: qwark

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

qwark.o: src\qwark.cc
    $(CC) $(CFLAGS) -c src\qwark.cc -o obj\qwark.o

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

请告诉我我做错了什么………

当源变量在rhs上时展开它

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

您正在修改文本
SOURCES
word,而不是相应的变量值。请尝试以下操作:

SOURCES := quark.cc

SOURCES := $(addprefix src\,$(SOURCES))
OBJECTS := $(addprefix obj\,$(patsubst %.cc,%.o,$(notdir $(SOURCES))))
或者更简单一些:

SOURCES := quark.cc

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

$($(notdir$(SOURCES)):.cc=.o)
将扩展名为
$(notdir$(SOURCES))
的变量,它是
quark.cc
。就我个人而言,我会将Makefile放在src\中,而不太担心.o,因为我会告诉vcs忽略它们。谢谢,这是我所需要的。反斜杠从何而来?
是否使
真的将它们识别为目录分隔符?@reinierpost是。是的。我是在windows机器上编译的,但为了兼容性,这也可以在linux机器上进行。我对麦克一无所知。