我仍然习惯于设置 Makefile 并同时使用 SDL,但我无法让 Makefile 正常工作。我不知道这是我的 makefile 的问题还是我的 SDL 做错了什么。这是我的制作文件:
#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,但我在它们上找到的大多数网站都向您展示了一种完全不同的使用它们的方式,这让学习它们变得困难。
最佳答案
这是生成文件的问题。当它到达这一点时:
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++)可能也会有所帮助。
关于c++ - 使用 Makfile 和 SDL 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10875358/