有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)
请,有人告诉我它是什么,我做错了..........
您正在修改文字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\%)
谢谢,那正是我需要的。 – Andonuts 2012-02-05 22:08:22
展开SOURCES变量时,其在RHS?
SOURCES := $(addprefix src\,$(SOURCES))
OBJECTS := $(addprefix obj\,$($(notdir $(SOURCES)):.cc=.o))
'$($(notdir $(SOURCES)):. cc = .o)'会展开一个名为'$(notdir $(SOURCES))'''quark.cc'的变量。 – 2012-02-05 20:26:24
个人而言,我会将Makefile放在src \中,而不用担心.o,因为我会告诉vcs忽略它们。 – Bill99 2012-02-05 21:48:38
从哪里来的反斜线? 'make'真的可以识别那些作为目录分隔符吗? – reinierpost 2012-02-06 08:49:32
@reinierpost是的。是的,它确实。我正在编译一个窗口框,但出于兼容的目的,这也可以在Linux上进行。我不知道mac。 – Andonuts 2012-02-07 02:40:50