Pull to refresh

1.5 Компиляция SFML с помощью CMake

Reading time11 min
Views23K
Original author: Laurent Gomila


От переводчика: данная статья является пятой в цикле переводов официального руководства по библиотеке SFML. Прошлую статью можно найти тут. Данный цикл статей ставит своей целью предоставить людям, не знающим язык оригинала, возможность ознакомится с этой библиотекой. SFML — это простая и кроссплатформенная мультимедиа библиотека. SFML обеспечивает простой интерфейс для разработки игр и прочих мультимедийных приложений. Оригинальную статью можно найти тут. Начнем.

Оглавление:
0.1 Вступление

1. Приступая к работе

  1. SFML и Visual Studio
  2. SFML и Code::Blocks (MinGW)
  3. SFML и Linux
  4. SFML и Xcode (Mac OS X)
  5. Компиляция SFML с помощью CMake

2. Модуль System

  1. Обработка времени
  2. Потоки
  3. Работа с пользовательскими потоками данных

3. Модуль Window

  1. Открытие и управление окнами
  2. Обработка событий
  3. Работа с клавиатурой, мышью и джойстиками
  4. Использование OpenGL

4. Модуль Graphics

  1. Рисование 2D объектов
  2. Спрайты и текстуры
  3. Текст и шрифты
  4. Формы
  5. Проектирование ваших собственных объектов с помощью массивов вершин
  6. Позиция, вращение, масштаб: преобразование объектов
  7. Добавление специальных эффектов с шейдерами
  8. Контроль 2D камеры и вида

5. Модуль Audio

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

6. Модуль Network

  1. Коммуникация с использованием сокетов
  2. Использование и расширение пакетов
  3. Веб-запросы с помощью HTTP
  4. Передача файлов с помощью FTP


Вступление


Название этой статьи может ввести в заблуждение. Вы не будете компилировать SFML с помощью CMake, потому что CMake не является компилятором. Итак, чем же является CMake?

CMake — это кроссплатформенная система автоматизации сборки программного обеспечения из исходного кода. Вместо сборки SFML, она собирает то, что собирает SFML: решение Visual Studio, проект Code::Blocks, make-файлы Linux, проект XCode и так далее. Фактически она может генерировать файлы сборки или проекта для любой операционной системы или компилятора на ваш выбор. CMake чем-то похожа на autoconf/automake или premake.

CMake используется многими проектами, включая Blender, Boost, KDE, и Ogre. Вы можете прочитать больше о CMake на официальном веб-сайте или на ее странице в википедии.

Как вы могли ожидать, эта статья разделена на две части:

  • Генерация конфигурационного файла сборки с использованием CMake
  • Сборка SFML и набора средств разработки с использованием данного конфигурационного файла

Установка зависимостей


SFML зависит от некоторых библиотек, так что, прежде чем приступать к конфигурированию, вы должны их удовлетворить.

На Windows и Mac OS X все зависимости SFML поставляются вместе с ней, так что вам не придется ничего скачивать/устанавливать. Сборка будет работать «из коробки».

Однако в Linux никакие зависимости не удовлетворены заранее, так что вам придется установить все зависимости. Вот список зависимостей, которые необходимо удовлетворить перед сборкой SFML:

  • freetype
  • jpeg
  • x11
  • xrandr
  • xcb
  • x11-xcb
  • xcb-randr
  • xcb-image
  • opengl
  • flac
  • ogg
  • vorbis
  • vorbisenc
  • vorbisfile
  • openal
  • pthread

Имена этих пакетов в различных дистрибутивах могут отличаться. После их установки не забудьте установить заголовочные файлы для разработчиков.

Конфигурация вашей сборки SFML


Этот шаг состоит из создания проекта/файла сборки, с помощью которого, в конечном счете, и будет скомпилирована SFML. Обычно, этот шаг заключается в выборе цели сборки, способа сборки и места сборки. Есть несколько других опций, которые позволят вам создавать файлы конфигурации сборки, соответствующие вашим потребностям. Мы рассмотрим эту тему более подробно ниже.

Первое, что вам необходимо выбрать — где будут созданы проект/файлы сборки и объектные файлы (файлы, получаемые во время процесса компиляции). Они могут генерироваться и в дереве исходного кода (т.е. в корневой директории SFML), однако это вызовет загрязнение корневого каталога объектными файлами и прочим мусором. Наилучшее решение — генерировать их в отдельную папку, что позволит вам сохранить корневую директорию SFML чистой. Использование отдельной директории также поможет в использовании нескольких сборок (static, dynamic, debug, release, ...).

Теперь, когда вы выбрали директорию сборки, есть еще одна вещь, которую необходимо сделать перед запуском CMake. Когда CMake конфигурирует ваш проект, она ищет доступный компилятор (и, если это необходимо, проверяет его версию). По этой причине исполняемый файл компилятора должен быть доступен, когда CMake запускается. Это не проблема на Mac OS X и Linux, потому что компилятор установлен по стандартному пути и всегда доступен, но на Windows вы должны добавить путь до директории вашего компилятора в переменную среды PATH, что бы CMake смог найти его автоматически. Это особенно важно, когда у вас установлено несколько компиляторов или несколько версий одного компилятора.

На Windows, в случае, если вы используете GCC (MinGW), вы можете временно добавить путь до директории MinGW\bin и затем запустить CMake из командной строки:

> set PATH=%PATH%;your_mingw_folder\bin
> cmake -G"MinGW Makefiles" ./build

С Visual C++ вы можете просто запустить CMake из «командной строки Visual Studio», доступной из меню «Пуск», или запустить .bat-файл vcvars32.bat вашей установки Visual Studio в консоли, .bat-файл установит все переменные среды в консоли за вас.

> your_visual_studio_folder\VC\bin\vcvars32.bat
> cmake -G"NMake Makefiles" ./build

Теперь вы можете запустить CMake. По факту есть три способа запустить ее:

  • cmake-gui
    Это графический интерфейс CMake, который позволяет вам сконфигурировать все с помощью кнопок и текстовых полей. Очень удобно просматривать и редактировать опции сборки, и, возможно, это наиболее легкое решение для новичков и людей, которые не хотят иметь дело с командной строкой.
  • cmake -i
    Это интерактивная командная строка CMake, которая проведет вас через параметры сборки. Это хорошее решение, если вы хотите запустить CMake из командной строки, но не помните все параметры, которые доступны при использовании из командной строки, и какие из них важны.
  • cmake
    Это прямой вызов к CMake. Если вы используете этот способ, вы должны указать все аргументы и их значения в качестве параметров командной строки. Что бы распечатать список аргументов, запустите cmake -L.

В этой статье мы будем использовать cmake-gui, так как этот вариант, скорее всего, будут использовать новичка. Мы предполагаем, что люди, использующие командную строку, обратятся к документации по CMake. За исключением снимков экрана и инструкций по нажатию кнопок, все, что объясняется ниже, применимо и для командной строки (опции, например).

Вот как выглядит CMake GUI:



Первые шаги, которые вы должны сделать, перечислены ниже:

  • Укажите CMake, где располагается исходный код SFML (это должен быть корневой каталог SFML, в котором расположен файл CMakeLists.txt).
  • Выберите директорию, в которой будет сгенерирован проект или файлы сборки (если директория не существует, CMake создаст ее).
  • Нажмите на кнопку «Configure».

Если вы запускаете CMake в первый раз в данной директории (или если вы очистили кэш, оставшийся после прошлых запусков), CMake GUI предложит вам выбрать генератор. Другими словами, выбрать ваш компилятор/IDE.



Если вы используете Visual Studio 2010, вы должны выбрать «Visual Studio 10 2010» из выпадающего списка. Для генерации файла сборки для Visual Studio NMake, выберите «NMake Makefiles». Что бы сгенерировать файл сборки для MinGW (GCC), выберите «MinGW Makefiles». Как правило, легче собрать SFML с помощью файлов сборки: вы можете собрать всю библиотеку, используя одну команду, или даже сгрупировать несколько сборок в одном скрипте. В случае, если вы планируете собрать SFML и не хотите редактировать исходный код библиотеки, проект IDE вам не подходит.

Что еще более важно, процесс установки (он будет описан ниже) не работает для генератора «Xcode». По этой причине настоятельно рекомендуется использовать генератор «Makefile» при сборке на Mac OS X.

Всегда проверяйте, включена ли опция «Use default native compilers». Остальные три опции можно не трогать.

После выбора генератора, CMake запустит серию тестов, что бы собрать информацию о вашем наборе инструментов: компиляторе, стандартных заголовочных файлах, зависимости SFML и так далее. Если тесты завершатся успешно, будет выведено сообщение «Configuring done». Если что-то пойдет не так — внимательно прочитайте текст ошибки. Это может произойти, если ваш компилятор не доступен или настроен неправильно, либо не удовлетворена одна из зависимостей SFML.



После окончания конфигурирования, опции сборки появятся в центре окна. CMake имеет много опций, но многие из них установлены в правильное значение по умолчанию. Некоторые из них являются переменными кеша и лучше их не менять.

Это некоторые параметры, которые вы можете захотеть определить при конфигурировании вашей сборки SFML:
Параметр Значение
CMAKE_BUILD_TYPE Этот параметр устанавливает тип собираемой конфигурации. Принимает ключи «Debug» и «Release» (есть и другие принимаемые ключи, такие как «RelWithDebInfo» или «MinSizeRel», но они предназначены для более продвинутой сборки).
Помните, что если вы используете генератор для IDE, которая поддерживает множество конфигураций (например, Visual Studio), этот параметр игнорируется по причине того, что сборка может содержать несколько конфигураций одновременно.
CMAKE_INSTALL_PREFIX Путь, по которому будет произведена установка. По умолчанию, он установлен в наиболее типичный путь установки для данной операционной системы ("/usr/local" для Linux и Mac OS X, «C:\Program Files» для Windows и так далее). Установка SFML после сборки не является обязательной, вы можете использовать бинарные файлы напрямую из директории, в которой была произведена сборка. Однако установка SFML предпочтительнее.
CMAKE_INSTALL_FRAMEWORK_PREFIX(только для Mac OS X) Путь, по которому будет произведена установка фреймворка. По умолчанию это корневая папка библиотек, т.е. /Library/Frameworks. Как и в случае с CMAKE_INSTALL_PREFIX, этот параметр не является обязательным, но он рекомендована для охранения чистоты системы. Этот путь также используется для установки фреймворка sndfile (зависимость, не предоставляемая Apple) и фреймворка SFML, если был выбран параметр LD_FRAMEWORKS.
BUILD_SHARED_LIBS Этот логический параметр определяет, будет ли SFML собираться как динамическая (общая) библиотека, или как статические.
Эта опция не должна быть включена одновременно с SFML_USE_STATIC_STD_LIBS, они являются взаимоисключающими.
SFML_BUILD_FRAMEWORKS(только Mac OS X) Этот логический параметр определяет, будете ли вы строить SFML как фреймворк или как бинарную динамическую библиотеку. Сборка фреймворка требует определения параметра BUILD_SHARED_LIBS.
При публикации вашего продукта рекомендуется использовать SFML в качестве фреймворка. Заметим, что SFML не может быть собрана в конфигурации debug как фреймворк. В случае, если вам необходимо использовать SFML в конфигурации debug, используйте ее в качестве динамической библиотеки.
SFML_BUILD_EXAMPLES Этот логический параметр определяет, будут ли примеры использования SFML собраны с библиотекой или нет.
SFML_BUILD_DOC Этот логический параметр определяет, будет ли генерироваться документация по SFML. Обратите внимание, что программа Doxygen должна быть установлена и доступна, в противном случае включение этой опции приведет к ошибке.
На Mac OS X вы можете установить классический Unix doxygen в /usr/bin или подобную директорию директорию, либо же установить Doxygen.app в директорию «Applications», т.е. в ~/Applications.
SFML_USE_STATIC_STD_LIBS (только для Windows) Этот логический параметр выбирает тип библиотеки времени выполнения C/C++, с которой будет скомпонована SFML.
Если параметру присвоено значение TRUE, происходит статическая компоновка со стандартными библиотеками компилятора. В результате SFML становится самодостаточным и не зависит от динамических библиотек.
Если параметру присвоено значение FALSE (стандартный вариант), происходит динамическая компоновка со стандартными библиотеками. В результате SFML будет зависеть от dll библиотек компилятора (msvcrxx.dll/msvcpxx.dll в случае Visual C++, libgcc_s_xxx-1.dll/libstdc++-6.dll в случае GCC). Будьте осторожны при установке данного параметра. Настройки должны соответствовать вашему собственному проекту. Данная опция не должна быть включена одновременно с BUILD_SHARED_LIBS.
CMAKE_OSX_ARCHITECTURES(только для Mac OS X) Этот параметр указывает, для какой архитектуры SFML должен быть собран. Рекомендуется значение «i386;x86_64», для генерации универсальных бинарных файлов для обеих архитектур.
SFML_INSTALL_XCODE_TEMPLATES(только Mac OS X) Этот логический параметр определяет, будет ли с CMake устанавливать шаблоны для Xcode на вашу систему.
Пожалуйста, убедитесь, что директория /Library/Developer/Xcode/Templates/SFML существует и доступна для записи.
Дополнительные сведения об этих шаблонах можно найти в статье, рассматривающей установку SFML на Mac OS X.
SFML_INSTALL_PKGCONFIG_FILES(только для разделяемых библиотек Linux) Этот логический параметр определяет, будет ли CMake устанавливать pkg-config файлы на вашей системе. pkg-config — это инструмент, который предоставляет унифицированный интерфейс для запросов к установленным библиотекам.

После того, как все было сконфигурировано, нажмите на кнопку «Configure» еще раз. Опции не должны быть подсвечены красным цветом и кнопка «Generate» должна быть доступна. Нажмите на нее, что бы окончательно сгенерировать файлы сборки/проекта.



CMake создает кэш переменных для каждого проекта. Поэтому, если вы решите перенастроить что-либо позднее, вы обнаружите, что настройки прошлой конфигурации были сохранены. Внесите необходимые изменения, перенастройте и сгенерируйте новые файлы сборки/проекта.

C++11 и Mac OS X


Если вы хотите использовать функции C++11 в вашем приложении на Mac OS X, вы должны использовать clang (официальный компилятор от Apple) и libc++. Кроме того, вам будет необходимо собрать SFML с помощью этих инструментов, чтобы исключить любую несовместимость между библиотеками SFML и компилятором.

Настройки, которые вы должны использовать при сборке SFML с clang и libc++:

  • Выберите «Specify native compilers», а не «Use default native compilers» при выборе генератора.
  • Установите опцию CMAKE_CXX_COMPILER в /usr/bin/clang++ (смотрите снимок экрана).
  • Установите опцию CMAKE_C_COMPILER в /usr/bin/clang (смотрите снимок экрана).
  • Установите опцию CMAKE_CXX_FLAGS и CMAKE_C_FLAGS в "-stdlib=libc++".




Сборка SFML


Давайте начнем с хорошей новости: вам больше не придется пройти через этап настройки, даже если вы будете обновлять вашу рабочую копию SFML. CMake умна: она добавляет настраиваемый шаг генерации файлов сборки/проекта, что означает, что эти файлы регенерируются без внесения изменений.

Теперь вы можете собрать SFML. Конечно, как это сделать зависит от того, что именно вы сгенерировали (файлы сборки или проект). Если был сгенерирован проект/решение/рабочее пространство, откройте его в вашей IDE и соберите SFML, как если бы это был любой другой проект. Мы не будем вдаваться в подробности, так как существует слишком много разных сред разработки; мы предполагаем, что вы знаете, как использовать вашу IDE, и сможете выполнить эту несложную задачу самостоятельно.

Если вы сгенерировали makefile, откройте командную строку и выполнить команду make для вашей среды. Например, «nmake», если вы сгенерировали файл сборки NMake (Visual Studio), «mingw32-make», если был сгенерирован MinGW(GCC) makefile или просто «make», если вы сгенерировали Linux makefile.

Примечание: на Windows, программа make (nmake или mingw32-make) может быть недоступна. Если это так, не забудьте добавить ее расположение в переменную окружения PATH. Для уточнения см. раздел «Конфигурация вашей сборки SFML».

По умолчанию при сборке проекта будет собрано все (все библиотеки SFML, а также примеры использования SFML, если вы установили опцию SFML_BUILD_EXAMPLES). Если вы хотите собрать конкретную библиотеку SFML или конкретный пример использования библиотеки, вы можете выбрать различные цели сборки. Вы также можете выбрать в качестве цели очистку директории сборки, установку собранных фалов, используя соответствующие цели сборки (install и clean).

Ниже приведены все доступные цели сборки, зависящие от параметров, выбранных при конфигурации:

Цель Значение
all Цель по умолчанию. Используется, если не было указано цели сборки. Происходит сборка всех целей, в результате использования которых получаются бинарные файлы (библиотеки SFML и примеры).
sfml-system
sfml-window
sfml-network
sfml-graphics
sfml-audio
sfml-main
Строит соответствующие библиотеки SFML. Цель «sfml-main» доступна только при сборке для Windows.
cocoa
ftp
opengl
pong
shader
sockets
sound
sound-capture
voip
window
win32
X11
Сборка соответствующих примеров SFML. Эти цели доступны только если включен параметр SFML_BUILD_EXAMPLES. Помните, что некоторые цели доступны только на определенных операционных системах («cocoa» доступна только на Mac OS X, «win32» доступна только на Windows, «X11» доступна только на Linux и так далее).
doc Генерация документация по API. Эта цель доступна только если включен параметр SFML_BUILD_DOC.
clean Удаление всех объектных файлов, библиотек и примеров, созданных во время предыдущей сборки. В большинстве случаев вам не надо вызывать сборку с этой целью, за исключением тех ситуаций, когда вы хотите пересобрать SFML (при обновлении исходных кодов некоторые файлы могут быть не совместимы с существующими объектными фалйами и очистка является единственным решением этой проблемы).
install Установка SFML по стандартному пути, заданному параметром CMAKE_INSTALL_PREFIX или CMAKE_INSTALL_FRAMEWORK_PREFIX. Происходит копирование всех библиотек и заголовочных файлов SFML, а также примеров и документации, если были установлены параметры SFML_BUILD_EXAMPLES и SFML_BUILD_DOC. После установки вы получите читый дистрибутив SFML, как если бы вы загрузили SDK или установили SFML из пакетного репозитария вашего дистрибутива.


Если вы используете IDE, то цель — это просто проект. Что бы собрать цель, выберите соответствующий проект и скомпилируйте его (даже «clean» и «install» должны быть собраны, что бы быть выполненными. Пусть вас не смущает тот факт, что исходные коды не будут компилироваться). Если вы используете файлы сборки, для сборки цели передайте имя цели команде make. Например, «nmake doc», «mingw32-make install», «make sfml-network».

Теперь вы успешно построили SFML. Поздравляем!

Следующая статья: Обработка времени.
Tags:
Hubs:
+5
Comments0

Articles