C ++ SDL на macosx без Xcode - PullRequest
       34

C ++ SDL на macosx без Xcode

5 голосов
/ 04 января 2011

Система: черный Macbook под управлением Mac OS X 10.5.5 (Leopard)

Я хочу скомпилировать приложение hello-world SDL, используя только g ++. XCode хорош для Macintosh, но я хочу кросс-платформенную совместимость, поэтому я не буду использовать какую-либо инфраструктуру Coaca (без меню, без кнопок и т.д.) Кроме того, портирование проектов Xcode на другие ОС - это не то, что звучит весело. Я скачал и установил SDL в / Library / Frameworks.

Большой вопрос: что входит в make-файл (при условии, что в источнике есть только файл helloWorld.cpp). Я хотел бы избежать изменения файла Helloworld, найденного здесь , если это возможно.

Ответы [ 2 ]

5 голосов
/ 18 сентября 2012

Мне потребовалось немного времени, чтобы понять это самостоятельно, только я уже использовал SDL и переходил с C на C ++ на Lion.Здесь проблема не только в make-файле, но и в вашем исходном файле ...

Скачать 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 ++ искажать ваш вызов основной функции.Чтобы сделать это, объявите ваш main следующим образом:

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

Если вы не включите extern "C" , C ++ изменит имя вашей основной функции, и SDL победитне сможет автоматически его найти.Если вы не используете int main (int argc, char ** argv) сигнатура функции, C ++ будет жаловаться на несоответствия типов ... так что вы должны сделать это дословно.(При использовании GCC вы исключаете часть extern "C" )

Chenz

2 голосов
/ 04 января 2011

Попробуйте это:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...