Как запустить SFML в CLion, ошибка неопределенной ссылки на?

Я новичок в C ++ и пытаюсь научиться программировать игры, я выбираю SFML и работаю на CLion от Jetbrain и использую Ubuntu. Я следую этому уроку SFML и Linux вот мой код:

#include <SFML/Graphics.hpp>

using namespace sf;

int main() {

RenderWindow window(sf::VideoMode(200, 200), "SFML Work!");
CircleShape shape(100.f);
shape.setFillColor(Color::Green);

while (window.isOpen()) {
Event event;
while (window.pollEvent(event)) {
if (event.type == Event::Closed) {
window.close();
}
}

window.clear();
window.draw(shape);
window.display();
}

return 0;
}

Когда я запускаю на CLion это ошибка

CMakeFiles/SFMLBasic.dir/main.cpp.o: In function `main':
undefined reference to `sf::String::String(char const*, std::locale const&)'
undefined reference to `sf::VideoMode::VideoMode(unsigned int, unsigned int, unsigned int)'
undefined reference to `sf::RenderWindow::RenderWindow(sf::VideoMode, sf::String const&, unsigned int, sf::ContextSettings const&)'
...
undefined reference to `sf::Shape::~Shape()'

Как настроить или запустить SFML в CLion, я не знаю, что CMAKE может это сделать? Я бегу только через терминал, Это работает, если я запускаю эту команду.

g++ -c main.cpp
g++ main.o -o sfml-app -lsfml-graphics -lsfml-window -lsfml-system
./sfml-app

Как настроить, чтобы использовать все ссылочные переменные без делать руководство каждый раз в терминале? Благодарю.

6

Решение

Вам нужно связать библиотеку SFML в вашем CMakeLists.txt.

Посмотрите на CMake target_link_libraries.

А также эта ссылка может быть полезно узнать, как найти путь к библиотеке SFML в CMake.

Вот модуль FindSFML.cmake: https://github.com/LaurentGomila/SFML/blob/master/cmake/Modules/FindSFML.cmake

2

Другие решения

После прочтения предложения @Stackia. Это мое решение, обратитесь к этому руководству Учебник. Создайте свой SFML-проект с помощью CMake.

  1. Создать cmake_modules папку и скачать этот файл FindSFML.cmake и скопируйте в него.

  2. редактировать CMakeLists.txt добавив это в конечный файл, нажмите Обновить изменения.


# Define sources and executable set(EXECUTABLE_NAME "MySFML") add_executable(${EXECUTABLE_NAME} main.cpp)

# Detect and add SFML
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules" ${CMAKE_MODULE_PATH})
find_package(SFML 2 REQUIRED system window graphics network audio)
if(SFML_FOUND)
include_directories(${SFML_INCLUDE_DIR})
target_link_libraries(${EXECUTABLE_NAME} ${SFML_LIBRARIES})
endif()

[/ NOEDIT]

  1. Теперь вы можете выбрать имя исполняемого файла MySFML и нажмите Run (Shift + F10). Это работа!
    введите описание изображения здесь
6

Я исправил это с помощью следующих шагов:

  1. Скачать http://www.sfml-dev.org/download/sfml/2.3.2/64-Linux

    И распакуйте его в папку с моим проектом:

    /home/user/ClionProjects/CPP_first/
    
  2. Названный проект "CPP_first"

  3. main.cpp содержит следующее

    #include <SFML/Graphics.hpp>
    
    int main()
    {
    sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
    sf::CircleShape shape(100.f);
    shape.setFillColor(sf::Color::Green);
    
    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();
    }
    
    return 0;
    }
    
  4. CMakeLists.txt содержать следующее:

    set(EXECUTABLE_NAME "CPP_first")
    add_executable(${EXECUTABLE_NAME} main.cpp)# Detect and add SFML
    set(SFML_DIR "/home/user/ClionProjects/CPP_first/SFML-2.3.2/share/SFML/cmake/Modules")
    set(CMAKE_MODULE_PATH "/home/user/ClionProjects/CPP_first/SFML-2.3.2/share/SFML/cmake/Modules" ${CMAKE_MODULE_PATH})
    find_package(SFML REQUIRED system window graphics network audio)
    if(SFML_FOUND)
    include_directories(${SFML_INCLUDE_DIR})
    target_link_libraries(${EXECUTABLE_NAME} ${SFML_LIBRARIES})
    endif()
    
  5. Путь к моему проекту /home/user/ClionProjects/CPP_first/

PS: я не нашел, как найти SFML, когда он установлен:

sudo apt-get install libsfml-dev

Я надеюсь, что это поможет кому-то

3

Если вы устанавливаете SFML:

sudo apt-get install libsfml-dev

вы найдете путь в / usr / share / SFML /

0