0

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

4

1 回答 1

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 ...

我对 Makefiles 不太感兴趣,但我的猜测是会有这样的东西:

$(EXEC) : $(OBJS)
    $(CC) -o $@ $(CFLAGS) $(LDFLAGS) $(OBJS)

并将 CFLAGS 更改为不包含 -o 选项:

CFLAGS = $(shell sdl-config --cflags)

我认为在尝试自动化该过程之前,学习如何手动构建它(即,自己从命令行使用 g++)也可能会有所帮助。

于 2012-06-04T01:41:07.423 回答