Для проверки я буду использовать следующий код.
#include <iostream>
#include <SDL2/SDL.h>
const int WIDTH = 800, HEIGHT = 600;
int main( int argc, char *argv[] )
{
SDL_Init( SDL_INIT_EVERYTHING );
SDL_Window *window = SDL_CreateWindow( "Hello SDL World", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WIDTH, HEIGHT, SDL_WINDOW_ALLOW_HIGHDPI );
// Check that the window was successfully created
if ( NULL == window )
{
// In the case that the window could not be made...
std::cout << "Could not create window: " << SDL_GetError( ) << std::endl;
return 1;
}
SDL_Event windowEvent;
while ( true )
{
if ( SDL_PollEvent( &windowEvent ) )
{
if ( SDL_QUIT == windowEvent.type )
{
break;
}
}
}
SDL_DestroyWindow( window );
SDL_Quit( );
return EXIT_SUCCESS;
}
Ubuntu
Ставим code::blocks из магазина — здесь никаких неожиданностей. Далее создаем простенький файл mian.cpp для теста.
#include <iostream>
int main() {
std::cout << "Hello, world!" << std::endl;
return 0;
}
Если не собираетесь компилировать из терминала, то нужно указать target в настройках проекта.
Отлично. Далее нужно установить сам sdl2. Пишем в терминале
sudo apt install libsdl2-dev -y
После установки дадим знать ide, что нужно использовать sdl2. Перейдем в в раздел «project»->«build options». Нас интересует вкладка «Linker settings». В окно «other linker options» добавим "-lSDL2".
Заменяем на наш код. Отлично, окно рисуется.
macOS
Для установки вы можете использовать установочный образ с Сайта. На данный момент последняя стабильная версия 2.0.9.
Скачиваем и копируем в каталог /Library/Frameworks. Для использования может потребоваться аутентификация.
Запускаем xcode и выбираем проект command line tool macOS. Даем имя проекту и выбираем язык C++.
Чтобы добавить поддержку sdl2, необходимо перейти в «настройки проекта»->«build phases»->«link binary with libraries» и добавить элемент. В открывшемся окне выбрать «add other»
Добавляем наш файл /Library/Frameworks/SDL2.framework и можем проверять.
В случае, если вы предпочитаете использовать brew, то помните, что он устанавливает только статические библиотеки. В таком случае нужно передать флаг -I/usr/local/include.
Все работает, поехали дальше.
Windows
Установите vs studio. Скачайте библиотеку. Распакуйте содержимое и расположите где вам больше нравится. Я очень редко использую windows, поэтому не знаю, где хранятся все остальные библиотеки.
Создаем проект с пустым cpp файлом, либо консольное приложение, как вам удобно.
Перейдите в «проект»->«свойства»->«C/C++»->«дополнительные каталоги включаемых файлов». Добавьте путь к распакованному каталогу, указав include. В моем случае вышло \\Mac\Home\Downloads\SDL2-2.0.9\include, т.к. у меня виртуальная машина.
После этого в разделе «компоновщик»->«общие»->«дополнительные каталоги библиотек» нужно указать путь к SDL2.dll, например \\Mac\Home\Downloads\SDL2-2.0.9\lib\x64.
Осталось немного, «компоновщик»->«ввод»->«дополнительные зависимости» мы дописываем то, что необходимо использовать, SDL2.lib, SDL2main.lib, SDL2test.lib. После этого необходимо собрать проект. Собрав, скопируйте файл SDL2.dll из каталога lib\x64 или lib\x32 и поместите рядом с исполняемым файлом. Теперь пробуем наш код. Еще один момент: т.к. в «дополнительные каталоги включаемых файлов» мы указали путь сразу до подключаемых заголовков, то
#include <SDL2/SDL.h>
заменяем на
#include <SDL.h>
Поздравляю, мы успешно собрали приложения под основные платформы. Надеюсь, у вас не возникнет трудностей при установке.
Комментарии (5)
firegurafiku
02.06.2019 18:44+1А зачем «интегрировать» SDL в популярные IDE по-отдельности, когда можно использовать CMake на всех платформах и не хардкодить никаких \Mac\Home\Downloads\SDL2-2.0.9\include в свойствах проекта? Вся статья — вредный совет из серии «Как писать непереносимый софт, использую кроссплатформенный язык и кроссплатформенные библиотеки».
de-dup-i-dipi Автор
02.06.2019 21:02Я мог бы добавить что-то вроде
cmake_minimum_required(VERSION 3.14) project(Test) set(CMAKE_CXX_STANDARD 17) find_package(SDL2 REQUIRED) include_directories(${SDL2_INCLUDE_DIRS}) add_executable(Test main.cpp) target_link_libraries(Test ${SDL2_LIBRARIES})
Ну и небольшие отличия для windows.
Но я больше рассчитывал, что читать будут те, кто хочет поставить библиотеку и поиграться немного с ней. Если бы это использовали для командной разработки, то и вопросов как подключать библиотеку не было бы. Но вы абсолютно правы, через cmake будет проще для разработки на разных платформах. Я учту, для будущих статей(если они будут), что лучше ориентироваться на команду сразу.
mapron
02.06.2019 20:36А если софт например уже непереносимый (вся заточка на Windows например), в него запрещено добавлять кроссплатформенные библиотеки?)
Я сам хотел написать гневное «просто используйте CMake в 1 комменте», но подумал что так можно дойти до того, что новички в С++ будут знать только С++, а как работают форматы проектов на их платформе — и знать не будут. Так что «вредный совет» это легкое преувеличение. «небольшой полезности» я бы просто сказал.
mapron
Спасибо за статью, конечно, но немного насмешила фраза:
Я всегда считал, что SDL — одна из простейших в интеграции библиотек (что может быть не для хидер-онли либы, конечно). Перечитал статью, никаких «граблей» не нашел.