2012-02-05 28 views
2

如果我嘗試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

回答

4

您正在修改文字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

2

展開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