在MacOSX上使用C++ SDL而不需要Xcode

6

系统信息:黑色MacBook电脑运行Mac OS X 10.5.5(Leopard)

我想使用g++编译一个SDL hello-world应用程序。虽然Xcode适用于Macintosh,但我希望实现跨平台兼容性,因此不会使用coaca框架(无菜单、无按钮等)。另外,将Xcode项目移植到其他操作系统并不是什么有趣的事情。我已经下载并安装了SDL到/Library/Frameworks目录下。

最大的问题是:makefile中应该写什么(假设源文件只有一个helloWorld.cpp文件)。如果可能的话,我想避免修改在这里找到的Helloworld文件。

2个回答

6

我也花了一点时间才弄明白这个问题,不过我当时已经在Lion系统上使用SDL并且正在从C转向C++。问题并不仅限于makefile,可能还涉及到你的源文件...

下载SDL-version.tar.gz

解压并在命令提示符下运行

./configure --prefix=/home/user/SDL && make && make install

假设所有东西都已经构建完毕,现在您可以使用sdl-config来执行以下命令来构建您的源代码:
g++ Main.cpp -o Main `/home/user/SDL/sdl-config --cflags --libs` \
    -framework OpenGL -framework Cocoa

这与

g++ Main.cpp -o Main -I/home/user/SDL/include \
    -L/home/user/SDL/lib -lSDLmain -lSDL -framework OpenGL -framework Cocoa

现在关键的是你正在使用C++...为了让SDL宏正确地替换你的main函数,你需要防止C++编译器对你的main函数调用进行名称重整。为此,请按以下方式声明你的main函数:

extern "C" int main(int argc, char ** argv)
{
}

如果您不包含extern "C"内容,C++将更改您的主函数名称,SDL将无法自动找到它。如果您不使用int main(int argc,char ** argv)功能签名,C++将抱怨类型不匹配...所以您必须逐字逐句地做。 (如果使用GCC,则排除extern "C"部分)

+1 这真的帮了我很多,经过几个小时的挣扎,我终于用 g++-4.8 编译出了一个简单的 SDL 程序。 - mcheema

2

试试这个:

all: helloWorld

helloWorld: helloWorld.o
    g++ -o helloWorld helloWorld.o `sdl-config --libs`

helloWorld.o: helloWorld.cpp
    g++ -c `sdl-config --cflags` helloWorld.cpp
是一个工具,应该随着你的 安装一起提供。它可以输出与使用 SDL 编译时相关联的适当的编译器和链接器标志。

安装只安装框架而不是SDL配置,而在Macintosh上安装sdl-config是晦涩的。 - Kevin Kostlan
@Kevin Kostlan:对不起,我以为你已经按照Unix风格安装了它。如果您想使构建过程更具可移植性,仍然可以这样做。我认为使用该框架,您只需编译g++ helloWorld.cpp -framework SDL -framework Cocoa。 - Null Set
框架也无法工作。我还直接编译了sdl(./configure; make; make install),但不知道如何正确设置环境变量,例如路径(因此它仍然抱怨config未被识别)。 - Kevin Kostlan
我认为它只是将sdl-config脚本留在源目录中。至于路径变量,make install应该默认将库放在您的库路径中。那g++ helloWorld.cpp -lSDLmain -lSDL -framework Cocoa怎么样?如果找不到库,请尝试添加标志-L/usr/lib或您放置已编译的sdl库的位置。 - Null Set

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接