Познакомьтесь, SDL.
Как компилировать.
Давайте рассмотрим очень важный вопрос: как компилировать программы, использующие библиотеку SDL. Что
касается компиляции под платформу, отличную от Linux, внимательно ознакомьтесь с документацией для этой
платформы. Например, чтобы компилировать программы в среде Visual C++, прочтите файл VisualC.html, который
находится в архиве для Visual Studio (см. www.libsdl.org). Еще я просто
рекомендую прочитать SDL FAQ, который можно найти все на том же сайте. Пока я расскажу как компилировать
программы для Linux.
И так, мы будем использовать компилятор g++ (используйте gcc, если пишете на Си). Сначала рассмотрим все,
что касается #include. При подключении заголовков SDL к программе (обычно они находятся в /usr/include/SDL) мы
делаем так: #include "SDL.h"
. А потом указываем компилятору, где искать ненайденные заголовки
(как вы помните, если заголовок в команде #include
взят в кавычках, то он должен быть в текущей
директории). Это нужно для переносимости программ, потому что не у всех заголовки будут лежать там же, где и
у вас. При компиляции подставляем в качестве опции:
-I/usr/include/SDL
Или другой путь, если он у вас отличается от моего. Нам также нужно указать сами библиотеки, которые будем
линковать к нашей программе, а также путь к этим библиотекам: -L/usr/lib указывает путь к библиотекам, а
-lSDL линкует библиотеку libSDL.so к программе(опция -L указывает путь к библиотекам, а опция -l линкует библиотеку).
Соберем все в кучу. Я приведу листинг небольшой програмки, использующей SDL. Вы можете не стараться вникнуть
в код, потому что все это разберем далее в уроках.
#include "SDL.h"
#include <stdio.h>
int main() {
printf("Initializing SDL.\n");
if((SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO)==-1)) {
printf("Could not initialize SDL: %s.\n", SDL_GetError());
exit(-1);
}
printf("SDL initialized.\n");
printf("Quiting SDL.\n");
SDL_Quit();
printf("Quiting....\n");
return 0;
}
|
Пример взят из SDL Documentation. Назовите его test.cxx и давайте попробуем его собрать.
g++ -O3 -o test test.cxx -I/usr/include/SDL -L/usr/lib -lSDL
Флаг -O3 задает уровень оптимизации (-O3 задает максимальный уровень, по умолчанию используется -O2).
Флаг -o задает имя программы на выходе.
Все остальное я уже рассказал. Но существует более элегантный способ задать флаги компиляции SDL. Просто
выполните команду sdl-config --cflags --libs
. Все необходимые для компиляции флаги SDL будут на
выходе этой программы. То есть мы могли бы сделать так:
g++ -O3 -o test test.cxx `sdl-config --cflags --libs`
Где эту команду нужно поместить между знаков ` (это там где тильда ~).
Если проект большой и состоит из многих файлов, то компилировать каждый неудобно и сложно. По этому приготовьтесь
получить CRASH-курс по утилите make
.
Наверно не раз собирали какую-нибудь программу, набирая в консоли make
. Согласитесь, это гораздо проще,
чем компилировать каждый файл проекта примерно так же, как я показывал (см. выше). Чтобы работать с утилитой
make
, вы должны создать файл с именем "Makefile
" в директории с проектом. Теперь
возьмем пример простого make-файла для нашей тестовой программы, чтобы было легче разобраться:
TARGET = test
LIBS = `sdl-config --libs`
CFLAGS = -O3 `sdl-config --cflags`
CC = g++
all:
$(CC) $(CFLAGS) -c test.cxx -o test.o
$(CC) -o $(TARGET) test.o $(LIBS)
strip $(TARGET)
clean:
rm *.o
rm $(TARGET)
|
На первый взгляд немного сложно, но только на первый. И так, начнем по порядку. В верхней части мы задаем переменные:
TARGET - имя программы на выходе, LIBS - какие библиотеки использовать, CFLAGS - уровень оптимизации и путь к
заголовочным файлам библиотеки SDL, CC - имя выполняемого файла компилятора. Использовать переменные нужно так:
$(ПЕРЕМЕННАЯ), т.е. заключать в круглые скобки и перед скобками ставить знак доллара. С переменными все ясно
(надеюсь), теперь дальше: в make-файлах самое главное это так называемые цели (target). В нашем примере две цели -
это all и clean. С новой строки мы пишем правила для сборки цели - команды, которые нам нужны. Не забудьте начинать
каждую строку правил с нажатия кнопки TAB. Это обязательно. Если получите ошибку make-файла, то в первую очередь
проверьте, расставлены ли знаки табуляции. Очень удобно в этом плане использовать редактор Midnight Commander,
который подсвечивает табуляцию. В нашем случае мы сначала создаем object-файл, а потом программу. Строка
$(CC) $(CFLAGS) -c test.cxx -o test.o
эквивалентна
g++ -O3 -I/usr/include/SDL -c test.cxx -o
-test.o
Опция компилятора -с указывает, что нужно пропустить финальную стадию компиляции (линковку), а
создать только объектный файл. И следующая строка
$(CC) -o $(TARGET) test.o $(LIBS)
эквивалентна
g++ -o test test.o -I/usr/lib -lSDL
Пути могут отличаться в зависимости от системы. Команда strip
оптимизирует исполняемый файл программы.
Цель clean удаляет объектные файлы и запускаемый файл программы. Чтобы выполнить цель clean нужно выполнить команду
make clean
. Для выполнения цели all достаточно просто выполнить команду make
. На самом деле
синтаксис make-файлов гораздо обширнее и сложнее, но если овладеть им, то ваша жизнь облегчится во много раз. В
интернете можно найти очень много информации по утилите make. Здесь я описал только самые основы, но с помощью таких
же make-файлов мы и будем компилировать примеры из уроков.
©opyleft PLG, 2003.