суббота, 19 сентября 2015 г.

Прикручиваем библиотеку SDL 1.2.15 к Code::Blocks 13.12 в Ubuntu 15.04 Linux


Для создания нового SDL проекта будет использована среда программирования Code::Blocks 13.12. Но, в первую очередь данную IDE необходимо установить. В Ubuntu 15.04 установить Code::Blocks можно из центра приложений Ubuntu (Ubuntu Software Center). Запустим центр приложений Ubuntu (Смотрите рисунок 1, обозначение 1). Для поиска приложения воспользуйтесь полем поиска приложений (Смотрите рисунок 1, обозначение 2).

 
Рисунок 1. Центр приложений Ubuntu

Введите в поле поиска название приложения “code blocks”, результатом поиска будет необходимая нам среда Code::Blocks (Смотрите рисунок 2).

Рисунок 2. Поиск в центре приложений Ubuntu


Установите Code::Blocks IDE, для этого выберете приложение и нажмите кнопку Install (Установить).
Запустите только что установленное приложение Code::Blocks IDE из главного меню Ubuntu (Смотрите рисунок 3).

 
Рисунок 3. Запуск Code::Blocks IDE
 
Для вызова главного меню Ubuntu нажмите на значак Ubuntu как показано на рисунке 3, обозначино цифрой 1. В поле поиска установленных приложений наберите “code blocks” как показано на рисунке 3, обозначено цифрой 2. Запустите найденое приложение Code::Blocks IDE как показано на рисунке 3, обозначено цифрой 3.
Прежде чем мы продолжим, нам необходимо установить SDL. В Ubuntu это делается легко, одной командой в терминале. Запустим терминал и выполним команду:

sudo apt-get install libsdl1.2debian libsdl1.2-dev

Так же нам необходимо подготовить окружение для сборки нашего проекта из исходного кода. Выполните команду в терминале:
sudo apt-get install build-essential

Запустите Code::Blocks IDE.

Рисунок 4. Главное окно Code::Blocks IDE

Code::Block открыт (Смотрите рисунок 4), выбираем пункт меню File (Файл) > New (Новый) > Project... (Проект...). В окне выбора нового проекта, выберите проект с названием Empty project (Пустой проект), после нажать кнопку Go (Вперед). После нам откроется мастер настройки пустого проекта. На первом шаге мастера нажимаем кнопку Next. На втором шаге зададим название проекта (Project title), например sdl_p1, зададим путь (Folder to create project in) по которому будет хранится наш проект, например ~/projects/sdl (~ - Домашний каталог текущего пользователя), поля название файла проекта (Project filename) и название полного пути проекта (Resulting filename) оставим по умолчанию и нажмем кнопку Next. На третьем шаге мастера пустого проекта нас попросят выбрать название компилятора установленного в вашей операционной системе, и имена папок, где будет хранится отладочная информация и конечный исполняемый файл нашей программы, так что все оставляем по умолчанию и нажимаем кнопку Finish. Все пустой проект создан, переходим к добавлению исходного файла, где мы будем писать наш исходный код. Для создания исходного файла выберите пункт меню File (Файл) > New (Новый) > File... (Файл...). В окне выбора типа нового файла необходимо выбрать Empty file (Пустой файл), после нажать кнопку Go (Вперед). Далее в открывшемся окне мастера настройки пустого файла, на первом шаге, нажать кнопку Next. На втором шаге задать имя создоваемого исходного файла с указанием его полного пути хранения. Исходный файл назавем main.c, а путь хранения исходного файла будет путь до папки, где хронится наш проект, это ~/projects/sdl/sdl_p1/main.c. На этом же шаге нас попросят указать цели сборки проетка, выберим обе цели сборки проекта Debug - проект сообирается с отладочной информацией и Release - проект собирается без отладочной информации. После нажмите кнопку Finish. Далее в опциях сборки проекта нам необходимо прописать пути до заголовочных файлов и статически линкуемых библиотек SDL. Например у меня заголовочные файлы хронятся на /usr/include, а статически линкуемые библиотеки /usr/lib/x86_64-linux-gnu. Теперь выбираем пункт меню Project > Build options..., в открывшемся окне мы увидим название нашего проекта и две цели сборки проекта Debug и Realese. Для каждой из целей сборки проекта мы должны указать все необходимые параметры для успешной сборки проекта, но, так как мы начинающие разработчики мы будем использовать только одну цель сборки проекта Debug. Debug - режим сборки проекта при котором исполняемый файл проекта комплектуется отладочной информацией, который позволяет отлаживать проект во время выполнения, и отслеживать значения переменных и ход работы программы. Значит выбераем режим проекта Debug, для этого режима в разделе Linker Settings (Настроек Ликовщика), для группы Link libraries указать имена файлов статически линкуемых библиотек SDL. Для этого нажмите кнопку Add (Добавить) и выберите статические библиотеки с именами файлов libSDLmain.a и libSDL.a. На вопрос (Keep this as a relative path?) использовать относительный путь или нет, ответьте нет (No). То есть, путь к статической библиотеке будет абсалютный и примет следующий вид /usr/lib/x86_64-linux-gnu/libSDLmain.a и /usr/lib/x86_64-linux-gnu/libSDL.a соответствено (Смотрите рисунок 5).

Рисунок 5 . Настройка опций компиляции и линковки


Для группы Other linker options (Другие опции линковщика) необходимо ввести следующие опции линковщика:

`sdl-config --libs`

Таким образом мы линковщику сообщили, что при линковке необходимо, при получание исполняего фыйла, присоеденить статически игровой библиотеки SDL (Смотрите рисунок 5).
Теперь перейдите в раздел Search directories (Директории поиска) и в подгруппе Compiler добавьте путь до заголовочных (подключаемых) файлов библиотеки SDL, данный путь выглядит так: /usr/include. Далее в подгруппе Linker добавьте путь до статически линкуемых библиютек, данный путь выглядит так: /usr/lib/x86_64-linux-gnu/.
Ну вот и все, с настройками закончили, теперь в наш проект необходимо добавить минимальный код для создания окна с использованием библиотеки SDL.

Данный код выглядит так:
#include "SDL/SDL.h"
int main( int argc, char* args[] ) {
    SDL_Surface* display = NULL;
    SDL_Init( SDL_INIT_EVERYTHING );
    display = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );
    int quit = 0;
    SDL_Event event;
    while( !quit )
    {
        if( SDL_PollEvent( &event ) )
        {
            if( event.type == SDL_KEYDOWN ) {
                switch( event.key.keysym.sym ) {
                    case SDLK_ESCAPE: quit = 1; break;
                    default : break;
                }
            }
            else if( event.type == SDL_QUIT )
            {
                quit = 1;
            }
        }
        SDL_Flip(display);
    }
    return 0;
}


syntax highlighted by Code2HTML, v. 0.9.1