Makfile 和 SDL 遇到问题

Posted

技术标签:

【中文标题】Makfile 和 SDL 遇到问题【英文标题】:Having trouble with Makfile and SDL 【发布时间】:2012-06-04 01:21:48 【问题描述】:

我仍然习惯于设置 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,但我在它们上找到的大多数网站都向您展示了一种完全不同的使用方式,因此很难学习它们。

【问题讨论】:

【参考方案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++)可能也会有所帮助。

【讨论】:

哦,我现在明白了。谢谢,这解决了问题。现在我只需要弄清楚为什么它说我的 SDL_PollEvent 是一个未定义的引用。

以上是关于Makfile 和 SDL 遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

Makfile order-only prerequisites 应用场景,解决并行编译遇到的object存放的自定子目录未被提前创建导致编译失败的问题,No target rule

Makfile order-only prerequisites 应用场景,解决并行编译遇到的object存放的自定子目录未被提前创建导致编译失败的问题,No target rule

我在 sdl2 上加载 bmp 图像时遇到问题

使用 Allegro / SDL 与 OpenGL / DirectX 制作游戏时,我会遇到哪些限制?

使用SDL和GLEW设置Visual Studio项目

调用 SDL_SetVideoMode 时出现分段错误