2011-01-04 17 views
5

Sistema: negro MacBook con Mac OS X 10.5.5 (Leopard)C++ SDL en MacOSX sin Xcode

Quiero compilar una aplicación hola-mundo SDL utilizando sólo g ++. Xcode es bueno para Macintosh, pero quiero compatibilidad multiplataforma, por lo que no utilizaré ninguno de los marcos coaca (sin menús, sin botones, etc.). Además, portar proyectos de Xcode a otros sistemas operativos no es algo que suene divertido. Descargué e instalé SDL en/Library/Frameworks.

La gran pregunta es: ¿qué va en el archivo MAKE (suponiendo que solo un archivo helloWorld.cpp en la fuente). Me gustaría evitar modificar el archivo Helloworld encontrado here si es posible.

Respuesta

5

Me tomó un tiempo darme cuenta de esto, solo que ya estaba usando SDL y estaba pasando de C a C++ en Lion. No es sólo el makefile que es el tema aquí, es probable que el archivo de origen, así ...

Descargar SDL- versión .tar.gz

extraer y ejecutar en el indicador

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

Suponiendo que todo llegó a construir, ahora se puede utilizar la SDL-config para construir su fuente mediante la ejecución:

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

que es lo mismo como

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

Ahora la clave aquí es que está utilizando C++ ... SDL para las macros para reemplazar correctamente el principal, es necesario evitar que el compilador de C++ de usted mangling llamada a la función principal. Para ello declaran que su principal como la siguiente:

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

Si no se incluye el extern "C" cosas, C++ va a cambiar el nombre de su función principal y SDL no será capaz de forma automática Encuéntralo. Si no utiliza la firma de función int main (int argc, char ** argv), C++ se quejará de que no coinciden los tipos ... por lo que debe hacerlo al pie de la letra. (Si se utiliza GCC, que se excluya la extern "C" porción)

Chenz

+0

+1 Esto realmente ayudó después de horas de frustración. Obtuve un programa SDL simple para compilar con g ++ - 4.8. – mcheema

2

Prueba esto:

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 es una herramienta que debería haber venido con su SDL instalación que da salida del compilador y enlazador adecuadas para al compilar con SDL.

+0

La instalación sólo instala la estructura y no config SDL, y la instalación de SDL-config en Macintosh es oscura. –

+0

@Kevin Kostlan: Lo siento, pensé que lo habías instalado estilo Unix. Es posible que aún desee si desea hacer que su proceso de compilación sea más portátil. Creo que con el framework solo puedes compilar g ++ helloWorld.cpp -framework SDL -framework Cocoa –

+0

-framework tampoco funciona. También compilé sdl directamente (./configure; make; make install) pero no sé cómo configurar las variables del entorno, como la ruta de acceso correctamente (por lo que todavía se queja de que no se reconoce la configuración). –