有makefile文件相关的噩梦

问题描述:

如果我尝试make all,我得到:有makefile文件相关的噩梦

make: ***No rule to make target 'src\SOURCES', needed by 'all'. Stop. 

如果我尝试make qwark,我得到:

make: ***No rule to make target 'obj\src\SOURCES' needed by 'qwark'. Stop. 

如果我尝试make 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 [email protected] 

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) 

请,有人告诉我它是什么,我做错了..........

+0

从哪里来的反斜线? 'make'真的可以识别那些作为目录分隔符吗? – reinierpost 2012-02-06 08:49:32

+0

@reinierpost是的。是的,它确实。我正在编译一个窗口框,但出于兼容的目的,这也可以在Linux上进行。我不知道mac。 – Andonuts 2012-02-07 02:40:50

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

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\%) 
+0

谢谢,那正是我需要的。 – Andonuts 2012-02-05 22:08:22

展开SOURCES变量时,其在RHS?

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

'$($(notdir $(SOURCES)):. cc = .o)'会展开一个名为'$(notdir $(SOURCES))'''quark.cc'的变量。 – 2012-02-05 20:26:24

+0

个人而言,我会将Makefile放在src \中,而不用担心.o,因为我会告诉vcs忽略它们。 – Bill99 2012-02-05 21:48:38