C++ SDL on macosx without Xcode

天涯浪子 提交于 2019-12-10 13:58:50

问题


System: black Macbook running Mac os X 10.5.5 (Leopard)

I want to compile an SDL hello-world application using only g++. Xcode is good for macintosh but I want cross-platform compatibility, so I won't use any of the coaca framework (no menus, no buttons, etc). Also, porting Xcode projects to other os's is not something that sounds fun. I downloaded and installed SDL into /Library/Frameworks.

The big question is: what goes in the makefile (assuming just a helloWorld.cpp file in the source). I would like to avoid modifying the Helloworld file found here if possible.


回答1:


Took me a little while to figure this out myself, only I was already using SDL and was transitioning from C to C++ on Lion. Its not just the makefile that is the issue here, its probably your source file as well...

Download SDL-version.tar.gz

Extract and run at prompt

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

Assuming everything actually built, you now can use the sdl-config to build your source by executing:

g++ Main.cpp -o Main `/home/user/SDL/sdl-config --cflags --libs` \
    -framework OpenGL -framework Cocoa

which is the same as

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

Now the key here is that you are using C++... for SDL macros to correctly replace your main, you need to prevent the C++ compiler from mangling you main function call. To do this declare your main like the following:

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

If you don't include the extern "C" stuff, C++ will change the name of your main function and SDL won't be able to automatically find it. If you don't use the int main(int argc, char ** argv) function signature, C++ will complain about type mismatches... so you've got to do it verbatim. (If using GCC, you exclude the extern "C" portion)

Chenz




回答2:


Try this:

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 is a tool which should have come with your SDL install that outputs appropriate compiler and linker flags for when compiling with SDL.



来源:https://stackoverflow.com/questions/4591076/c-sdl-on-macosx-without-xcode

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!