没有Xcode的macosx上的C ++ SDL

时间:2011-01-04 06:04:04

标签: c++ macos g++ sdl

系统:运行Mac OS X 10.5.5(Leopard)的黑色Macbook

我想只使用g ++编译一个SDL hello-world应用程序。 Xcode适用于macintosh,但我想要跨平台兼容性,所以我不会使用任何coaca框架(没有菜单,没有按钮等)。此外,将Xcode项目移植到其他操作系统并不是很有趣。我下载并将SDL安装到/ Library / Frameworks中。

最大的问题是:makefile中的内容(假设源代码中只有一个helloWorld.cpp文件)。如果可能,我想避免修改here找到的Helloworld文件。

2 个答案:

答案 0 :(得分:5)

我花了一点时间自己解决这个问题,只是我已经在使用SDL并且在Lion上从C转换为C ++。它不仅仅是makefile这里的问题,它可能也是你的源文件......

下载SDL- 版本 .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 ++编译器破坏你的主函数调用。为此,请按以下方式声明您的主要内容:

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

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

Chenz

答案 1 :(得分: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-config是一个应该随SDL安装一起提供的工具,它在用SDL编译时输出适当的编译器和链接器标志。