Я новичок в 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
Как настроить, чтобы использовать все ссылочные переменные без делать руководство каждый раз в терминале? Благодарю.
Вам нужно связать библиотеку SFML в вашем CMakeLists.txt.
Посмотрите на CMake target_link_libraries.
А также эта ссылка может быть полезно узнать, как найти путь к библиотеке SFML в CMake.
Вот модуль FindSFML.cmake: https://github.com/LaurentGomila/SFML/blob/master/cmake/Modules/FindSFML.cmake
После прочтения предложения @Stackia. Это мое решение, обратитесь к этому руководству Учебник. Создайте свой SFML-проект с помощью CMake.
Создать cmake_modules
папку и скачать этот файл FindSFML.cmake и скопируйте в него.
редактировать CMakeLists.txt
добавив это в конечный файл, нажмите Обновить изменения.
[/ NOEDIT]
# 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()
- Теперь вы можете выбрать имя исполняемого файла
MySFML
и нажмите Run (Shift + F10). Это работа!
Я исправил это с помощью следующих шагов:
Скачать http://www.sfml-dev.org/download/sfml/2.3.2/64-Linux
И распакуйте его в папку с моим проектом:
/home/user/ClionProjects/CPP_first/
Названный проект "CPP_first"
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;
}
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()
Путь к моему проекту /home/user/ClionProjects/CPP_first/
PS: я не нашел, как найти SFML, когда он установлен:
sudo apt-get install libsfml-dev
Я надеюсь, что это поможет кому-то
Если вы устанавливаете SFML:
sudo apt-get install libsfml-dev
вы найдете путь в / usr / share / SFML /