Перейти к содержимому

Как подключить sfml в clion windows

  • автор:

Что такое SFML? Установка SFML в C++

Пссс, парень! Не хочешь попробовать немного SFML? Убойная штука. Достаточно самой малости и с её помощью ты сможешь воплотить в жизнь то, о чем раньше мог только мечтать. Тебе понравится, гарантирую. Тем более тебе, как новичку, первая порция бесплатно, я угощаю. Ну что, договорились? Тогда по рукам.

Оглавление:

  1. Что такое SFML?
  2. Установка библиотеки SFML в Visual Studio
  3. Первые шаги и первые…
  4. Заключение

Что такое SFML?

SFML (сокр. от «Simple and Fast Multimedia Library» = «Простая и быстрая мультимедийная библиотека») — это свободная кроссплатформенная мультимедийная библиотека, написанная на языке C++. Она также доступна и для других языков: C, C#, .Net, D, Java, Python, Ruby, OCaml, Go и Rust. Представляет собой объектно-ориентированный аналог SDL.

С её помощью можно легко и непринужденно создавать любую 2D-графику: начиная от простейших одиночных геометрических фигур (типа треугольника) и заканчивая полноценными играми-платформерами.

Исходный код библиотеки предоставляется под лицензией zlib/png, а скачать SFML можно с оф. сайта разработчика www.sfml-dev.org.

Примечание: Все примеры этого урока были сделаны мной в ОС Windows 7 с использованием IDE MS Visual Studio 2017 Community Edition и библиотеки SFML 2.5.1.

Ну что, парень, ты готов? Да вижу, что готов. Погнали!

Установка библиотеки SFML в Visual Studio

Я не буду рассказывать, как установить Visual Studio, а перейду сразу к SFML. Для того, чтобы установить библиотеку, нужно зайти на сайт www.sfml-dev.org и перейти в пункт меню «Download» и скачать «SFML 2.5.1»:

Как уже говорилось ранее, в качестве IDE я буду использовать Visual Studio 2017, поэтому скачиваем соответствующую версию SFML. Вы также можете заметить наличие готового пакета для эстетов Code Blocks. Помимо этого, в глаза бросаются варианты библиотеки для других версий Visual Studio. Сразу дам совет — не пытайтесь лепить Франкенштейна, используя неподходящий билд SFML, иначе вы рискуете получить вагон и маленькую тележку всякого рода проблем на свою голову.

Теперь скачанный архив нужно распаковать. У себя я выбрал следующий путь — C:\Soft\SFML-2.5.1-windows-vc15-32-bit .

Далее создадим пустой проект и подключим к нему библиотеку SFML. Для этого запустите Visual Studio и выберите «Файл» > «Создать» > «Проект…» , или можно воспользоваться сочетанием горячих клавиш Ctrl+Shift+N . Задайте имя и расположение проекта так, как показано на следующем скриншоте:

Теперь, когда у нас есть проект, нужно добавить в него файл, который будет содержать исходный код нашей программы. Для этого в окне «Обозреватель решений» клацните ПКМ по строке «Исходные файлы» > «Добавить» > «Создать элемент…» :

В поле «Имя» укажите main.cpp :

Отлично! Следующим шагом будет подключение библиотеки SFML к нашему проекту. Для этого нужно:

подключить каталог заголовочных и исходных файлов SFML ( /include );

подключить каталог библиотечных файлов SFML ( /lib );

подключить библиотечные файлы SFML в качестве дополнительных зависимостей.

Переходим в «Проект» > «Свойства: SFML_Tutorial…» :

В верхнем левом углу страницы свойств SFML_Tutorial есть выпадающий список возле пункта «Конфигурация» , установите его значение как «Все конфигурации» . Также проверьте, что в параметре «Платформа» установлено значение «Win32» . Затем в левой части окна найдите и выберите раздел «Свойства конфигурации» > «С/С++» > «Общие» . Обратите внимание на правую часть, нас интересует параметр «Дополнительные каталоги включаемых файлов» . Выберите его и нажмите . Перед вами появится новое окно, в котором нужно указать путь к заголовочным файлам библиотеки SFML. Обычно они располагаются в папке include. У меня этот путь выглядит как C:\Soft\SFML-2.5.1-windows-vc15-32-bit\SFML-2.5.1\include .

Похожим образом подключаются и файлы библиотек. Всё, что нужно сделать — это выбрать в левой части «Свойства конфигурации» > «Компоновщик» > «Общие» . Затем «Дополнительные каталоги библиотек» и . В открывшемся окне нужно будет указать путь к библиотечным файлам SFML, у меня это C:\Soft\SFML-2.5.1-windows-vc15-32-bit\SFML-2.5.1\lib .

Осталось подключить несколько файлов в виде дополнительных зависимостей для «Компоновщика». Для этого нужно переключить тип конфигурации на Debug , а затем в левой части окна выбрать «Свойства конфигурации» > «Компоновщик» > «Ввод» . Переведите взгляд на правую часть, где нужно найти строку «Дополнительные зависимости» и нажмите . В появившемся окне впишите имена следующих 4 файлов:

sfml-graphics-d.lib
sfml-window-d.lib
sfml-audio-d.lib
sfml-system-d.lib

Должно получиться следующее:

Первые шаги и первые…

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

using namespace sf ;
// Объект, который, собственно, является главным окном приложения
RenderWindow window ( VideoMode ( 200 , 200 ) , «SFML Works!» ) ;
// Главный цикл приложения. Выполняется, пока открыто окно
while ( window . isOpen ( ) )
// Обрабатываем очередь событий в цикле
Event event ;
while ( window . pollEvent ( event ) )
// Пользователь нажал на «крестик» и хочет закрыть окно?
if ( event . type == Event :: Closed )
// тогда закрываем его
window . close ( ) ;
// Отрисовка окна
window . display ( ) ;

Я вижу, как ваша рука уже потянулась к кнопке «Скомпилировать и запустить проект», но не торопитесь, давайте сначала разберем данный код:

Строка №1: Директива препроцессора #include… , которая подключает исходный файл SFML/Graphics.hpp к нашему проекту. Как раз этот файл и предоставляет нам возможность работать с 2D-графикой: спрайтами, текстом, геометрическими фигурами и прочими объектами.

Строка №3: Подключаем пространство имен sf .

Строка №8: Создаем объект window класса RenderWindow. Данный объект — это наше окно, в котором будет отображаться 2D-графика. Первый параметр VideoMode(200, 200) задает видеоразрешение окна (ширину и высоту). Второй параметр «SFML Works!» — это заголовок окна.

Далее идут 2 цикла while: внешний (строка №11) и внутренний (строка №15). Сложного здесь ничего нет. SFML предлагает удобные средства для работы с событиями. Именно их мы и будем использовать для создания цикла работы приложения и обработки событий окна. Во внешнем цикле while при помощи метода isOpen() мы проверяем, открыто ли наше окно в данный момент. Во внутреннем цикле while метод pollEvent(event) перебирает очередь событий (сообщений), которые возникают в нашем окне.

Очередь может содержать любое количество сообщений, именно по этой причине мы и используем цикл, чтобы перебрать их все. Предположим, например, что пользователь перемещает курсор во время выполнения нашей программы или нажимает на какие-то объекты. SFML обнаружит это и поместит два события в очередь: одно на перемещение курсора и одно на нажатие на объект. Выбрать определенное сообщение из очереди можно с помощью метода pollEvent() класса RenderWindow. Так вот, если какое-то событие из этой очереди совпадает с Event::Closed (т.е. пользователь нажал на крестик, тем самым послав сигнал «Закрыть окно»), то при помощи windows.close() мы закрываем окно. По сути, этот цикл бесконечен, и выход из него только один — закрыть окно программы.

В строке №23 мы вызываем метод display(), который отвечает за отрисовку нашего окна.

Вот теперь можно перейти к компиляции и первому запуску программы. Для этого нажмите в Visual Studio «Отладка» > «Запуск без отладки» (или Ctrl+F5 ). Ииии, вот и она! Ваша первая… ЧТО…. ОШИБКА…. WTF….

«Что за хрень. » — спросите вы. Столько времени потрачено на ковыряние, настройку и прочее ради вот этого вот?! Долбанного окна с ошибкой?! Нафиг всё, дизлайк/отписка, го даст2 я создал.

А проблема в том, что исполняемый файл нашей программы не может найти *.dll-файлы, в которых хранятся используемые нашим приложением функции. Решение очень простое — нужно скопировать все файлы (11 штук) из папки C:\Soft\SFML-2.5.1-windows-vc15-32-bit\SFML-2.5.1\bin\ в папку C:\dev\SFML_Tutorial\Debug\ , в которой хранится наш исполняемый файл SFML_Tutorial.exe:

Попробуйте теперь скомпилировать и запустить проект. В результате должно получиться следующее:

Это ваша первая программа, написанная на языке C++ с использованием библиотеки SFML. Черное окно Малевича. Как по мне, это выглядит как-то убого. Предлагаю добавить красок и поменять цвет фона с черного на какой-нибудь более веселый цвет. Для этого нам пригодится метод windows.clear() . Ниже представлен участок кода, куда нужно добавить данный метод:

Как подключить sfml в clion windows

Welcome, Guest. Please login or register. Did you miss your activation email?

  • SFML community forums »
  • Help »
  • General »
  • MinGW + SFML + CLion (Windows 10)

Pages: [1]

Author Topic: MinGW + SFML + CLion (Windows 10) (Read 7788 times)

0 Members and 1 Guest are viewing this topic.

Pages: [1]

  • SFML community forums »
  • Help »
  • General »
  • MinGW + SFML + CLion (Windows 10)

DS-Natural designed by DzinerStudio

Как установить библиотеку SFML для C++ на CLion?

Мне необходимо установить библиотеку SFML для C++ на CLion, так как Visual Studio мне не подходит по некоторым причинам. Как можно это сделать?

Отслеживать
задан 8 дек 2018 в 10:01
39 7 7 бронзовых знаков
Библиотека прописывается в CMakeLists , как и любая другая. В чём конкретно проблема?
8 дек 2018 в 10:10
Более того, на сайте SFML есть гайд, как собрать библиотеку с помощью cmake
8 дек 2018 в 10:14
Tocic , проблема в том что данный гайд не помогает, и появляются разного рода ошибки.
9 дек 2018 в 5:09

Разного рода? Какого? Приведите тексты ошибок в вопросе. Как сообщество может вам помочь, если не знает в чём у вас проблема?

9 дек 2018 в 8:24

CacaoBoy есть хороший Гайд на сайте gamefromscratch.com/post/2015/06/02/… сам ставил пару дней назад ,там норм рассказано

30 июл 2019 в 13:28

0

Сортировка: Сброс на вариант по умолчанию

Знаете кого-то, кто может ответить? Поделитесь ссылкой на этот вопрос по почте, через Твиттер или Facebook.

  • c++
  • sfml
    Важное на Мете
Связанные
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.8.3130

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Как подключить sfml в clion windows

На первом шаге проект нужно сконфигурировать, то есть создать финальный скрипт сборки, запустив cmake в будущем каталоге сборки.

# Сейчас мы в каталоге `myapp` с файлом CMakeLists.txt # Создадим каталог `myapp-release` и перейдём в него. mkdir --parents ../myapp-release cd ../myapp-release # Сконфигурируем проект для сборки в Release. # Флаг установит опцию CMAKE_BUILD_TYPE в значение "Release", # интерпретатор cmake считает это переключением на Release конфигурацию. cmake -DCMAKE_BUILD_TYPE=Release ../myapp 

На втором шаге нужно запустить финальный скрипт. Не вызывайте make ! Утилита cmake сделает это сама:

# Просим CMake запустить сборку в каталоге `myapp-release` # Можно добавить флаг `--target mylibrary` для сборки только mylibrary # Можно добавить флаг `--clean-first`, чтобы в начале новой сборки # стирать остатки предыдущей. cmake --build . # Аналогичный способ для GNU/Linux. Его по привычке советуют в сети, хотя # make доступен не всегда, а cmake --build работает на всех платформах. make 

Структура CMakeLists.txt

В начале главного файла CMakeLists.txt ставят метаинформацию о минимальной версии CMake и названии проекта:

# Указывайте последнюю доступную вам версию CMake. cmake_minimum_required(VERSION 3.8) # Синтаксис: project( VERSION LANGUAGES CXX), # теги VERSION и LANGUAGES необязательные. project(libmodel3d) 

Затем следует список инструкций, служащих для вычисления различных переменных, создания целей сборки, подключения проектов из подкаталогов и так далее. Например, подключить дополнительный CMakeLists.txt из подкаталога можно так:

# Простая версия: подключает скрипт по пути /CMakeLists.txt add_subdirectory() # Расширенная версия: дополнительно установит подкаталог сборки подпроекта add_subdirectory( ) 

Целью может стать исполняемый файл, собираемый из исходного кода

# Синтаксис: add_executable( ) # Добавлять `.h` необязательно, но лучше для работы из IDE: # - IDE определит заголовок как часть проекта # - cmake будет отслеживать изменения в заголовке и пересобирать # проект при изменениях. add_executable(pngconverter main.cpp PngReader.h PngReader.cpp) 

Целью также может быть библиотека, статическая или динамическая.

# Синтаксис: add_library( [STATIC|SHARED|INTERFACE] ) # Тип библиотеки (staic или shared) зависит от параметров сборки add_library(libpngutils PngUtils.h PngUtils.cpp) # Тип библиотеки: static add_library(libpngtools STATIC PngTools.h PngTools.cpp) 

Автогенерация проекта для Visual Studio (Windows)

Если используется Visual C++, то путь немного другой: на шаге конфигурирования создаётся проект для Visual Studio, который затем можно собрать из IDE либо так же из командной строки.

Созданный проект Visual Studio нельзя изменять и использовать постоянно, потому что при генерации проекта используются абсолютные пути и другие неприемлемые для постоянной работы вещи.

# Сейчас мы в каталоге `myapp` с файлом CMakeLists.txt # Сгенерируем проект Visual Studio для сборки. mkdir --parents ../myapp-build cd ../myapp-build # Конфигурируем для сборки с Visual Studio 2017, версия тулчейна v140 cmake -G "Visual Studio 2017" 

Если проект был сконфигурирован успешно, то в каталоге ../myapp-build появятся автоматически сгенерированный BUILD_ALL.sln и проекты для Visual Studio. Их можно открыть к IDE, либо собрать из командной строки с помощью cmake. Названия опций говорят сами за себя:

cmake --build . \ --target myapp \ --config Release \ --clean-first 

Зависимости между библиотеками и приложениями

Не используйте директивы include_directories , add_definitions , add_compile_options ! Они меняют глобальные настройки для всех целей, это создаёт проблемы при масштабировании.

  • Используйте target_link_libraries для добавления статических и динамических библиотек, от которых зависит цель
  • Используйте target_include_directories вместо include_directories для добавления путей поиска заголовков, от которых зависит цель
  • Используйте target_compile_definitions вместо add_definitions для добавления макросов, с которыми собирается цель
  • Используйте target_compile_options для добавления специфичных флагов компилятора, с которыми собирается цель
# Добавляем цель - статическую библиотеку add_library(mylibrary STATIC \ ColorDialog.h ColorDialog.cpp \ ColorPanel.h ColorPanel.cpp) # ! Осторожно - непереносимый код ! # Добавляем к цели путь поиска заголовков /usr/include/wx-3.0 # Лучше использовать find_package для получения пути к заголовкам. target_include_directories(mylibrary /usr/include/wx-3.0) 

Вы можете выбирать область видимости настройки:

  • PUBLIC делает настройку видимой для текущей цели и для всех зависящих от неё целей
  • PRIVATE делает настройку видимой только для текущей цели
  • INTERFACE делает настройку видимой только для всех зависящих от неё целей

Пример использования областей видимости:

# Каталог include будет добавлен к путям поиска заголовков в текущей цели и во всех зависимых целях target_include_directories(myTarget PUBLIC ./include) # Каталог src будет добавлен к путям поиска заголовков только в текущей цели target_include_directories(myTarget PUBLIC ./src) 

Схема зависимостей условного проекта:

Схема

Выбор стандарта и диалекта C++

Для настройки стандарта и флагов языка C++ не добавляйте флаги напрямую!

# ! Устаревший метод - прямое указание флага ! target_compile_options(hello PRIVATE -std=c++11) 

В CMake версии 3.8+ вы можете прямо потребовать включить нужный стандарт:

# Источник: https://cmake.org/cmake/help/latest/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.html # Включаем C++ 2017 target_compile_features(myapp cxx_std_17) # Альтернатива: включаем C++ 2014 target_compile_features(myapp cxx_std_14) # Альтернатива: включаем C++ 2011 target_compile_features(myapp cxx_std_11) 

В CMake версии до 3.7 включительно можно использовать set_target_properties (если не работает, то у вас слишком старый CMake):

# Стандарт: C++ 2014, расширения языка от производителя компилятора отключены set_target_properties(myapp PROPERTIES CXX_STANDARD 14 CXX_STANDARD_REQUIRED YES CXX_EXTENSIONS NO ) 

Для разработчиков библиотек есть более тонкий контроль над возможностями языка:

# API библиотеки (т.е. заголовки) требуют лямбда-функций и override, # реализация библиотеки требует ещё и range-based for. target_compile_features(mylibrary PUBLIC cxx_override cxx_lambdas PRIVATE cxx_range_for) 

Функции в CMake

CMake позволяет объявлять функции командами function(name) / endfunction() и макросы командами macro(name) / endmacro() . Предпочитайте функции, а не макросы, т.к. у функций есть своя область видимости переменных, а у макросов — нет.

function(hello_get_something var_name) . # Установить переменную в области видимости вызывающей стороны # можно с помощью тега PARENT_SCOPE set($var_name> $ret> PARENT_SCOPE) endfunction() 

Добавление исходников к цели с target_sources

Лучше добавлять специфичные исходники с помощью target_sources, а не с помощью дополнительных переменных.

add_library(hello hello.cxx) if(WIN32) target_sources(hello PRIVATE system_win.cxx) elseif(UNIX) target_sources(hello PRIVATE system_posix.cxx) else() target_sources(hello PRIVATE system_generic.cxx) endif() 

Интерфейс к утилитам командной строки

# Создать каталог debug-build cmake -E make_directory debug-build # Перейти в каталог debug-build cmake -E chdir debug-build 

Функция find_package

Функция find_package принимает имя библиотеки как аргумент и обращается к CMake, чтобы найти скрипт для настройки переменных данной библиотеки. В итоге при сборке либо возникает ошибка из-за того что пакет не найден, либо добавляются переменные, хранящие пути поиска заголовков, имена библиотек для компоновщика и другие параметры.

Пример подключения Boost, вызывающего встроенный в CMake скрипт FindBoost:

# Весь Boost без указания конкретных компонентов find_package(Boost REQUIRED) # Теперь доступны переменные # - Boost_INCLUDE_DIRS: пути к заголовочным файлам # - Boost_LIBRARY_DIRS: пути к статическим/динамическим библиотекам # - Boost_LIBRARIES: список библиотек для компоновщика # - Boost__LIBRARY: библиотека для компоновки с компонентом библиотек Boost 

Пример подключения библиотеки Bullet с помощью встроенного скрипта FindBullet и компоновки с приложением my_app:

# Вызываем встроенный скрипт FindBullet.cmake find_package(Bullet REQUIRED) # Добавляем пути поиска заголовков к цели my_app target_include_directories(my_app $BULLET_INCLUDE_DIRS>) # Добавляем список библиотек для компоновки с целью my_app target_link_libraries(my_app $BULLET_LIBRARIES>) 

PS-Group

  • PS-Group
  • sshambir@gmail.com
  • ps-group
  • image/svg+xml sshambir

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *