Сборка из исходников Ogre Dependencies, Ogre3D, MyGUI, Bullet Physics с использованием MinGW, CMake под Windows

В этой статье я буду описывать производимые мною действия под ОС Windows 7, для сборки из исходников Ogre Dependencies, Ogre3D, MyGUI, Bullet Physics с использованием MinGW, CMake.

Итак, на форуме русского сообщества Ogre3D, после того как я кинул ссылки на мои предыдущие статьи, человек под ником japplegame задал мне вполне резонный вопрос:

Одно непонятно, зачем нужен QtCreator?

Таки да, зачем нужен QtCreator для сборки из исходников, ведь CMake и MinGW хватает, чтобы собрать всё что нам нужно. Поэтому я решил написать ещё одну статью в которой будет описано как всё это дело собрать без QtCreator.

Я сделал удобный bat файл, который запускает инструменты с нужными командами(на мой взгляд). В результате, при обновлении исходников из репозиториев, нам нужно проделывать меньше телодвижений, чем с QtCreator’ом.

План данной статьи:
1. Подготовка необходимых инструментов
2. Организация структуры папок и закачка исходников
3. Сборка
4. Заключение

1. Подготовка необходимых инструментов

Прежде чем приступить к сборке, необходимо подготовить инструментарий.
Нам понадобится Mercurial, SVN, CMake. Для Mercurial я выбрал клиент TortoiseHg http://tortoisehg.bitbucket.org/. Для SVN одноимённый клиент TortoiseSVN http://tortoisesvn.net/. CMake можно скачать здесь http://www.cmake.org/.

Также нам понадобится MinGW. Так как я работаю в основном с Qt у меня имеется QtSDK в котором уже есть MinGW. Но у вас его может и не быть поэтому идём сюда http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/ и качаем самую последнюю версию MinGW. Ставим его и проверяем есть ли запись в ситемных перменных. Чтобы это сделать жмём «Пуск-Панель управления-Система и безопасность-Система-Дополнительные параметры системы», в открывшемся окне идём на вкладку «Дополнительно», после чего жмём на кнопку «Переменные среды…», в появившемся окне в разделе системные перменные ищем перменную «Path» после чего два раза шёлкаем по ней и в открывшемся окне в поле значение переменной добавляем путь к каталогу бинарников MinGW, у меня это путь «D:\QtSDK\mingw\bin». Выглядеть будет примерно так «…C:\Program Files\Windows Live\Shared;D:\QtSDK\mingw\bin;C:\Program Files\TortoiseGit\bin…». Заметьте, что отделение идёт точкой с запятой «;»

Также для сборки Ogre3D понадобится DirectX SDK. Я использовал Microsoft DirectX SDK (June 2010) его скачать можно тут http://www.microsoft.com/download/en/details.aspx?id=6812

После того как все необходимые инструменты установлены и настроены можно приступать к следующему этапу.

2. Организация структуры папок и закачка исходников

Немного о моей структуре папок, в которой всё будет располагаться:
В «D:\Dev\JustGameProject\ExternalDependencies» будут находится все зависимости моей игры (кроме QtSDK он в корне диска «D:\»).
Зависимости Ogre3D будут располагаться в следующих папках:

  • OgreDependencies
  • OgreDependencies_build
  • OgreDependencies_install

Сам Ogre3D будет располагаться в следующих папках:

  • Ogre
  • Ogre_build
  • Ogre_install

Библиотека для отрисовки интерфейса – MyGUI:

  • MyGUI
  • MyGUI_build
  • MyGUI_install

Физический движок Bullet Physics:

  • Bullet
  • Bullet_build
  • Bullet_install

В общем виде всё это дело будет выглядеть так:

D:\Dev\ExternalDependencies\
                        ├ OgreDependencies
                        ├ OgreDependencies_build
                        ├ OgreDependencies_install
                        ├ Ogre
                        ├ Ogre_build
                        ├ Ogre_install
                        ├ MyGUI
                        ├ MyGUI_build
                        ├ MyGUI_install
                        ├ Bullet
                        ├ Bullet_build
                        └ Bullet_install

3. Сборка

Создаём файл в «D:\Dev\JustGameProject\ExternalDependencies» с именем «build_all.bat».
Внимательно посмотрите какие параметры я скармливаю симэйку для создания конфигурации билда. Эти параметры я выбирал для себя возможно вам некоторые не подойдут. Содержимое бат файла:

@echo off

::if u want build enter Y in "" example: "Y"
SET build_OgreDependencies="Y"
SET build_Ogre="Y"
SET build_MyGUI="Y"
SET build_Bullet="Y"

::set OgreDependencies dirs
SET OgreDependencies_sources_dir="D:/Dev/JustGameProject/ExternalDependencies/OgreDependencies"
SET OgreDependencies_build_dir="D:/Dev/JustGameProject/ExternalDependencies/OgreDependencies_build"
SET OgreDependencies_install_dir="D:/Dev/JustGameProject/ExternalDependencies/OgreDependencies_install"

::set Ogre dirs
SET Ogre_sources_dir="D:/Dev/JustGameProject/ExternalDependencies/Ogre"
SET Ogre_build_dir="D:/Dev/JustGameProject/ExternalDependencies/Ogre_build"
SET Ogre_install_dir="D:/Dev/JustGameProject/ExternalDependencies/Ogre_install"

::set MyGUI dirs
SET MyGUI_sources_dir="D:/Dev/JustGameProject/ExternalDependencies/MyGUI"
SET MyGUI_build_dir="D:/Dev/JustGameProject/ExternalDependencies/MyGUI_build"
SET MyGUI_install_dir="D:/Dev/JustGameProject/ExternalDependencies/MyGUI_install"

::set Bullet dirs
SET Bullet_sources_dir="D:/Dev/JustGameProject/ExternalDependencies/Bullet"
SET Bullet_build_dir="D:/Dev/JustGameProject/ExternalDependencies/Bullet_build"
SET Bullet_install_dir="D:/Dev/JustGameProject/ExternalDependencies/Bullet_install"

if %build_OgreDependencies% == "Y" (
echo =======================================================
echo ============= Build Ogre3D dependencies ===============
echo =======================================================
::building OgreDependencies
RMDIR %OgreDependencies_build_dir% /S /Q
RMDIR %OgreDependencies_install_dir% /S /Q
MKDIR %OgreDependencies_build_dir% 
MKDIR %OgreDependencies_install_dir%
CD %OgreDependencies_build_dir%
cmake -G "MinGW Makefiles" -D CMAKE_INSTALL_PREFIX:STRING=%OgreDependencies_install_dir% %OgreDependencies_sources_dir%
::building Debug
cmake -D CMAKE_BUILD_TYPE:STRING=Debug %OgreDependencies_sources_dir%
mingw32-make.exe
mingw32-make.exe install
::building Release
cmake -D CMAKE_BUILD_TYPE:STRING=Release %OgreDependencies_sources_dir%
mingw32-make.exe
mingw32-make.exe install
)



if %build_Ogre% == "Y" (
echo =======================================================
echo ==================== Build Ogre3D =====================
echo =======================================================
::building Ogre
RMDIR %Ogre_build_dir% /S /Q
RMDIR %Ogre_install_dir% /S /Q
MKDIR %Ogre_build_dir%
MKDIR %Ogre_install_dir%
CD %Ogre_build_dir%
cmake -G "MinGW Makefiles" -D OGRE_DEPENDENCIES_DIR:STRING=%OgreDependencies_install_dir% -D CMAKE_INSTALL_PREFIX:STRING=%Ogre_install_dir% -D OGRE_BUILD_RENDERSYSTEM_D3D9:BOOL=false %Ogre_sources_dir%
::building Debug
cmake -D CMAKE_BUILD_TYPE:STRING=Debug %Ogre_sources_dir%
mingw32-make.exe
mingw32-make.exe install
::building Release
cmake -D CMAKE_BUILD_TYPE:STRING=Release %Ogre_sources_dir%
mingw32-make.exe
mingw32-make.exe install
)



if %build_MyGUI% == "Y" (
echo =======================================================
echo ==================== Build MyGUI ======================
echo =======================================================
::building MyGUI
RMDIR %MyGUI_build_dir% /S /Q
RMDIR %MyGUI_install_dir% /S /Q
MKDIR %MyGUI_build_dir%
MKDIR %MyGUI_install_dir%
CD %MyGUI_build_dir%
cmake -G "MinGW Makefiles" -D MYGUI_DEPENDENCIES_DIR:STRING=%OgreDependencies_install_dir% -D OGRE_SOURCE:STRING=%Ogre_sources_dir% -D OGRE_BUILD:STRING=%Ogre_install_dir% -D MYGUI_DONT_USE_OBSOLETE:BOOL=true -D MYGUI_BUILD_PLUGINS:BOOL=false -D MYGUI_BUILD_DEMOS:BOOL=false -D MYGUI_BUILD_TOOLS:BOOL=true -D MYGUI_INSTALL_MEDIA:BOOL=true -D MYGUI_INSTALL_SAMPLES:BOOL=false -D MYGUI_INSTALL_TOOLS:BOOL=true -D CMAKE_INSTALL_PREFIX:STRING=%MyGUI_install_dir% %MyGUI_sources_dir%
::building Debug
cmake -D CMAKE_BUILD_TYPE:STRING=Debug %MyGUI_sources_dir%
mingw32-make.exe
mingw32-make.exe install
::building Release
cmake -D CMAKE_BUILD_TYPE:STRING=Release %MyGUI_sources_dir%
mingw32-make.exe
mingw32-make.exe install
)



if %build_Bullet% == "Y" (
echo =======================================================
echo ================ Build Bullet physics  ================
echo =======================================================
::building Bullet
RMDIR %Bullet_build_dir% /S /Q
RMDIR %Bullet_install_dir% /S /Q
MKDIR %Bullet_build_dir%
MKDIR %Bullet_install_dir%
CD %Bullet_build_dir%
cmake -G "MinGW Makefiles" -D BUILD_DEMOS:BOOL=false -D BUILD_EXTRAS:BOOL=false -D INSTALL_LIBS:BOOL=true -D CMAKE_INSTALL_PREFIX:STRING=%Bullet_install_dir% %Bullet_sources_dir%
::building Debug
cmake -D CMAKE_BUILD_TYPE:STRING=Debug %Bullet_sources_dir%
mingw32-make.exe
mingw32-make.exe install
::building Release
cmake -D CMAKE_BUILD_TYPE:STRING=Release %Bullet_sources_dir%
mingw32-make.exe
mingw32-make.exe install
)



pause

В переменных build_OgreDependencies, build_Ogre, build_MyGUI, build_Bullet, хранятся ключи которые говорят: надо или не надо собирать ту или иную библиотеку. Если мы присвоим build_OgreDependencies значение «Y» то зависимости Огра будут собираться, если мы присвоим нечто другое то зависимости Огра не будут собираться. Так и с остальными переменными.
Следующая доза переменных это пути к каталогам исходников, сборки и установки.
После того, как мы настроили наш bat файл, можно его запускать. Стоит понимать, что консоль не может уместить все сообщения сборки, поэтому желательно запускать батник из консоли и перенаправлять его вывод в файл. Таким образом, всё, что выводится в консоль, теперь будет писаться в файл, который после сборки можно почитать и посмотреть всё ли прошло успешно. Это можно сделать вызвав в консоли такую команду:

call build_all.exe>Build_log.txt

4. Заключение

На этом всё. Удачных вам сборок =)

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s