我仍然习惯于设置Makefile并使用SDL,而且我无法让makefile正常工作。我不知道我的makefile是否有问题,或者我是否对SDL做错了。这是我的make文件:
#Game Make file
EXEC = game.exe
OBJS = App.o\
App_OnInit.o\
App_OnEvent.o\
App_OnLoop.o\
App_OnRender.o \
App_OnCleanup.o
CC = g++
CFLAGS = -o $(shell sdl-config --cflags)
LIBS =
LDFLAGS = $(shell sdl-config --libs)
$(EXEC): $(OBJS)
$(CC) $(CFLAGS) $(LDFLAGS) $@ $(OBJS) $(LIBS)
%.o: src/%.cpp
$(CC) -c $<
.PHONY: clean
clean:
rm -f $(EXEC) $(OBJS) *~
当我尝试制作它时虽然我明白了:
g++ -c src/App.cpp
g++ -c src/App_OnInit.cpp
g++ -c src/App_OnEvent.cpp
g++ -c src/App_OnLoop.cpp
g++ -c src/App_OnRender.cpp
g++ -c src/App_OnCleanup.cpp
g++ -o -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -L/usr/lib/i386-linux-gnu -lSDL game.exe App.o App_OnInit.o App_OnEvent.o App_OnLoop.o App_OnRender.o App_OnCleanup.o
g++: error: game.exe: No such file or directory
make: *** [game.exe] Error 1
我正在尝试拼凑如何正确使用makefile,但我发现的大多数网站都会向您显示使用它们的完全不同的方式,这使得它们难以学习。 < / p>
答案 0 :(得分:1)
这是makefile的一个问题。当它到达这一点时:
g++ -o -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -L/usr/lib/i386-linux-gnu -lSDL game.exe App.o App_OnInit.o App_OnEvent.o App_OnLoop.o App_OnRender.o App_OnCleanup.o
-o选项设置输出文件的名称。你想要更像的东西:
g++ -o game.exe -I/usr/include/SDL ...
我对Makefile没有太热,但我的猜测是这样的:
$(EXEC) : $(OBJS)
$(CC) -o $@ $(CFLAGS) $(LDFLAGS) $(OBJS)
并将CFLAGS更改为不包含-o选项:
CFLAGS = $(shell sdl-config --cflags)
我认为在尝试自动化流程之前,学习如何手动构建它(即自己从命令行使用g ++)可能也会有所帮助。