среда, 6 января 2010 г.

Компиляция игр для/в венды/венде

Игры, которые я пишу для линуха, теперь стало возможным компилировать для/в венде. Большое Спасибо Tamahome с форума gamedev.ru. В своих играх я использую связку из С++ + SDL + OpenGL. Для компиляции игры в *.exe для, делаем следущее:

1)В начале *.cpp файла программы добавляем:

#ifdef __WIN32__
#include скобка влево windows.h скобка вправо
#endif

далее, ищем функцию main() и меняем ее на:

#ifdef __WIN32__
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow){
#else
int main(int argc, char **argv){
#endif

Все, теперь один и тот же текст программы можно компилировать и в вайне/винде (об этом ниже), и,по старому-через команду make в линухе.

2) Для компиляции программы в *.exe в линухе я установил wine (для компиляции в венде, вероятно, все следущие действия будут аналогичными). Многие скажут, что, дескать вайн не ТРУ, но вайн всеравно будет необходим для последущей проверки результата компиляции.

3) Качаем вендовую IDE+gcc отсюда:http://downloads.sourceforge.net/codeblocks/codeblocks-8.02mingw-setup.exe. Под вайном это IDE заводится без проблемм. Под линем работать в ней мы не будем (я предпочитаю geany), а, вот, для компиляции *.exe использовать-самое оно. А в венде для работы ее можно использовать.

4) После, идем на http://www.libsdl.org/projects/ и качаем SDL-ные библиотеки. Я скачивал эти (они не все нужны, просто "чтобы было"):

SDL_Cbs, SDL_image, SDL_mixer, SDL_net, SDL_rtf, SDL_ttf.

Качаем все это из подразделов Binary/Win32. На примере SDL_mixer - это выглядит так: SDL_mixer-1.2.11-win32.zip(это bin) и SDL_mixer-devel-1.2.11-VC.zip (это devel).Не обращаем внимания, если написано что хедеры для VC. На самом деле все подходит без всяких правок. Расспаковываем. Из bin-ов, в последствии, будем набирать необходимые dll для скомпиленного в *.exe проекта (ложить в папку проекта).А в devel-е обычно находятся папки include и lib, их необходимо скопировать в соответствующие папки в %HOME FOLDER%/.wine/drive_c/Progrаmm Files/CodeBlocks/MinGW.

5) Теперь, качаем саму SDL. Идем на http://www.libsdl.org/download-1.2.php и качаем из подраздела
Development Libraries/Win32 что-то, похожее на это, SDL-devel-1.2.14-mingw32.tar.gz (Mingw32). Также, оттуда подбираем необходимую SDL.DLL для нашего будущего проекта: подраздел Runtime Libraries/Win32, SDL-1.2.14-win32.zip (ложим в папку проекта). Расспаковав SDL-devel-1.2.14-mingw32.tar.gz, видим, что это один в один папка MinGW. Дополняем НАШУ MinGW этим содержимым.

6) Теперь, запускаем вайновый CodeBlocks. Открываем наш *.cpp проект. Перед его компиляцией в *.exe необходимо подлинковать нужные либы (действие, аналогичное созданию make файла для компиляции в лине). Для этого ползем к верхним менюшкам.
Settings->Compiler and Debuger->откроется окно, по умолчанию в нем стоим на разделе Global Compiler Settings-> вкладка Linker Settings->кнопка Add под левой колонкой->кнопка с тремя точками->нас просят указать нужные библиотеки, идем в папку Codeblocks/MinGW/lib/, и, удерживая Ctrl, выбираем следущие либы:

SDL_image.lib, SDL_mixer.lib, SDL_ttf.lib, libSDL.dll.a, libSDLmain.a, libopengl32.a, libglaux.a, libglu32.a, libglut.a, libglut32.a.

Возможно среди этих библиотек есть лишние.

7)Теперь возможна компиляция проекта в вендовый *.exe - кнопка с шестерней Build или Ctrl+F9. Все, exe готов.