Skip to content

Компиляция SFML, используя CMake

Самый удобный способ скомпилировать свой проект с использованием SFML, на мой взгляд, - это сделать это с помощью CMake, потому что из коробки мы получаем кроссплатформенность и хороший инструментарий. Что ж, без лишних слов - приступим!

Перед началом убедитесь, что SFML установлен. Об этом можно узнать тут.

Структура проекта

Создаём main.cpp с тестовым кодом:

C++
#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(400, 400), "SFML works!");
    sf::CircleShape shape(100.f);
    shape.setPosition(100,100);
    shape.setFillColor(sf::Color(200,30,10));
    
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        window.clear(sf::Color(20,5,5));
        window.draw(shape);
        window.display();
    }

    return 0;
}

и CMakeLists.txt с кодом:

cmake
cmake_minimum_required(VERSION 3.0)
project(YourProjectName)

# Указание стандарта C++
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# Поиск пакета SFML
# Укажите SFML_DIR, если SFML установлена в нестандартном месте
find_package(SFML 2.6 COMPONENTS graphics REQUIRED) # дополните нужными вам модулями

# Добавление исполняемого файла
add_executable(YourProjectName main.cpp)

# Связывание с библиотеками SFML
target_link_libraries(YourProjectName sfml-graphics)  # дополните нужными вам модулями

# Если проект собирается на Windows, копируем DLL-файлы в выходную папку
if(WIN32)
    # Предполагается, что DLL-файлы находятся в подпапке 'bin' в папке установки SFML
    # Укажите правильный путь к DLL-файлам SFML
    add_custom_command(TARGET YourProjectName POST_BUILD
                       COMMAND ${CMAKE_COMMAND} -E copy_directory
                       ${SFML_DIR}/bin $<TARGET_FILE_DIR:YourProjectName>)
endif()

В случае с Windows вписываем в наш CMakeLists.txt путь до установленной библиотеки, например:

cmake
set(SFML_DIR "C:/SFML/lib/cmake/SFML")

И если вы используете динамическое подключение библиотеки, то нужно будет таскать вместе с .exe файлом вашей программы ещё и DLL файлы библиотеки.

Компиляция

Переходим в командную строку, переходим в папку с нашим проектом и создаём папку build, после чего переходим в неё и инициализируем CMake, после чего компилируем и получаем свежий скомпилированный проект с использованием SFML:

shell
mkdir build
cd build
cmake ..
make

Готово!

Содержание доступно по лицензии MIT