使用makefile在OS X上编译SDL

时间:2009-12-06 05:17:27

标签: c++ macos sdl

我正在尝试编译我在OS X上用C ++和SDL编写的俄罗斯方块程序。首先我尝试这样做:

`g++ -o tetris main.cpp `sdl-config --cflags --libs` -framework Cocoa`

得到了这个:

Undefined symbols:
  "Game::startGame()", referenced from:
      _main in ccQMhbGx.o
  "Game::Game()", referenced from:
      _main in ccQMhbGx.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

这是main.cpp文件:

#include <iostream>
#include "Game.h"

int main(int argc, char* argv[]) {
 Game *game = new Game();
 game->startGame();

 return 0;
}

Game.h是游戏类,其中包含所有其他类(Board.h,IO.h,Piece.h,Pieces.h),并且包含游戏的主要逻辑。

我真的希望能够为此编写一个makefile,或者找到一些方法将其轻松地分发给朋友。

编辑:

这是最终的makefile,以防其他人遇到同样的问题:

CC=g++
CFLAGS=-c -Wall
SDLFLAGS=`sdl-config --cflags --libs` -framework Cocoa
SOURCES=main.cpp Game.cpp IO.cpp Board.cpp Pieces.cpp Piece.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=tetris

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
 $(CC) $(OBJECTS) $(SDLFLAGS) -o $@

.cpp.o:
 $(CC) $(CFLAGS) $< -o $@

clean:
 rm -rf *.o $(EXECUTABLE)

1 个答案:

答案 0 :(得分:3)

我认为你的编译问题与SDL主函数有关。

编译失败是因为你缺少对“Game.o”的引用或者调用Game.cpp编译产生的对象文件。尝试:

g++ -o tetris main.cpp Game.o Pieces.o Whateverelse.o `sdl-config --cflags --libs` -framework Cocoa