Все статьи / Подключение SFML к Visual Studio 2015

SFML - это библиотека для языка C++, обеспечивающая простые средства создания окна, двумерного рисования, работы с сетью и с операционной системой. Она работает на Windows, Linux и Mac OS X. В статье мы покажем, как подключить SFML к проекту в Visual Studio.


Дистрибутив библиотеки последней версии можно скачать на www.sfml-dev.org. Выбирайте 32-битный или 64-битный дистрибутив для нужной версии Visual Studio.

скриншот

После скачивания нас ожидает ещё несколько шагов для подключения SFML к приложению:

  • обеспечить поиск заголовочных файлов *.h препроцессором C++
  • обеспечить поиск библиотек *.lib (*.a) компоновщиком C++
  • перечислить библиотеки *.lib (*.a), используемые проектом
  • добавить динамические библиотеки *.dll (*.so`) в пути поиска программы
  • добавить макрос SFML_DYNAMIC в настройки препроцессора

Выбор Visual Studio

Предпочтительно использовать последнюю выпущенную версию Visual Studio Community Edition, и выбирать английскую локализацию. Если вы установили другую локализацию (например, русскую), её лучше удалить и всё же поставить английскую. В противном случае появится целый ряд проблем с терминологией, поиском информации в сети и использованием статей и книг. Не секрет, что большая часть актуальной информации о программировании в сети — на английском языке, и лучше, если интерфейс среды разработки тоже будет английским.

Механизм Property Sheet

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

Соблюсти эти требования можно с помощью Property Sheets — внешних файлов, которые система сборки MSBuild и среда Visual Studio интерпретируют при загрузке проекта *.vcxproj.

Для начала работы с Property Sheets откройте вкладку “Property Manager” вместо “Solution Explorer” в панели Visual Studio. Нужный пункт меню доступен из раздела “View”, но может находиться непосредственно в этом меню или скрываться в подменю “Other Windows”.

Скриншот

Затем раскройте список Property Sheets. Вы можете изменить существующий Property Sheet с названием “Microsoft.Cpp.Win32.user” (или “Microsoft.Cpp.x64.user” для 64-битной конфигурации), поскольку этот Property Sheet лежит в личном каталоге пользователя и по умолчанию включается во все C++-проекты, созданные в Visual Studio.

Выбранный Property Sheet можно настроить вместо настройки проекта, и внесённые изменения будут действовать для всех проектов на данной машине, но не попадут под контроль версий Git.

Скриншот

На выходе вы получите файл *.props, который представляет собой переносимые между проектами настройки сборки. В этот файл надо добавить пути к заголовочным файлам и библиотекам, как описано ниже.

Настройка путей поиска компонентов SFML

После распаковки загруженного архива с SFML в распакованном каталоге будут следующие важные для нас компоненты:

  • каталог include должен быть добавлен в пути поиска заголовочных файлов (в Visual Studio это называют include directories, на UNIX их принято называть include paths)
  • каталог lib должен быть добавлен в пути поиска линкуемых библиотек (в Visual Studio это называют library directories, на UNIX их принято называть linker search paths)

Внесённые изменения среда отображает жирным шрифтом:

скришнот

При настройке путей поиска в диалоге их редактирования не забудьте оставить включённой галочку “Inherit from parent or project settings”, чтобы случайно не сбросить стандартные пути поиска заголовков и библиотек, входящих в состав Windows API, C++ Standard Library и C Standard Library

скриншот

Настройка предопределённых макросов препроцессора

Поскольку SFML подключается нами как динамическая библиотека, нам надо не забыть объявить макрос SFML_DYNAMIC в списке предопределённых макросов (в Visual Studio они называются Preprocessor Definitions):

скриншот

Настройка шага компоновки (linking)

В настройки компоновщика (linker) в списке его входных файлов необходимо добавить

  • для Release-конфигурации: sfml-graphics.lib, sfml-window.lib, sfml-system.lib
  • для Debug-конфигурации: sfml-graphics-d.lib, sfml-window-d.lib, sfml-system-d.lib

скриншот

Копирование DLL в каталог с собранной программой

В дистрибутиве SFML каталог bin содержит разделяемые библиотеки (*.dll), которые следует добавить в каталог с исполняемым файлом после сборки программы.

  • Вы можете скопировать DLL вручную
  • Вы можете настроить шаг сборки, например, PreLink или PostBuild

Вы можете сделать это вручную, либо настроить шаг сборки PostBuild, как описано в статье на jeremybytes.blogspot.com

Пример на SFML (рисование круга на экране)

Пример ниже можно использовать для проверки работоспособности подключённого SFML. В случае ошибок внимательно читайте их содержание. Прежде всего определите, на каком шаге сборки происходит ошибка:

  • на шаге компиляции (Compile Step), что проявляется в ошибках поиска заголовочных файлов
  • на шаге компоновки (Link Step), что проявляется в таких ошибках, как “unresolved symbol”, “library not found”
  • при запуске приложения, где проблемы обычно вызваны отсутствием DLL, неправильной платформой (32-bit / 64-bit) или версией DLL и другими подобными проблемами
#include <SFML/Graphics.hpp>

sf::RenderWindow window(sf::VideoMode(800, 600), "Window Title");
sf::CircleShape shape;
shape.setRadius(20);
shape.setFillColor(sf::Color::Green);
shape.setPosition(100, 0);

while (window.isOpen())
{
    sf::Event event;
    while (window.pollEvent(event))
    {
        if (event.type == sf::Event::Closed)
        {
            window.close();
        }
    }
    window.clear();
    window.draw(shape);
    window.display();
}