c++ - 使用 Makfile 和 SDL 时遇到问题

标签 c++ linux makefile g++ sdl

我仍然习惯于设置 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/

相关文章:

linux - 调试 make 和 cmake?

c - GCC:编译不同文件夹中的文件

qt - 为什么库名称在其名称中多了一个 0?

c++ - delete[] 字符数组

c - 使用 waitpid 选项等待所有子进程 __WALL

java - CMake 对 `JNI_CreateJavaVM' 的 undefined reference

c++ - 在 C++ 文件中链接 mat.h

c - 识别调用内核 API 的 Linux 进程/服务

c++ - 如何在 GLUT 上加载 bmp 以将其用作纹理?

c++ - 错误 C1083 无法打开包含文件 : 'IexBaseExc.h' : No such file or directory