7

我是 C++ 新手并尝试学习游戏编程,我选择 SFML 并在 Jetbrain 的 CLion 上运行并使用 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()'

我如何配置或设置在 CLion 中运行 SFML,我不知道 CMAKE 能做到吗?我只通过终端运行,如果我运行这个命令就可以了。

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

如何在终端中每次都配置为使用所有参考变量而无需手动操作?谢谢。

4

5 回答 5

7

阅读@Stackia 建议后。这是我的解决方案,请参阅本教程教程:使用 CMake 构建您的 SFML 项目

  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()

  1. 现在您可以选择 Executable NameMySFML并单击 Run (Shift+F10)。这行得通! 在此处输入图像描述
于 2014-10-29T04:33:13.840 回答
3

您需要在 CMakeLists.txt 中链接 SFML 库。

看看 CMake target_link_libraries

此链接可能有助于您了解如何在 CMake 中查找 SFML 库路径。

这是一个 FindSFML.cmake 模块:https ://github.com/LaurentGomila/SFML/blob/master/cmake/Modules/FindSFML.cmake

于 2014-10-28T07:38:35.520 回答
3

我已通过以下步骤修复它:

  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

我希望它会帮助某人

于 2015-12-09T15:51:58.990 回答
2

现在这变得简单多了(参见这个SFML 论坛讨论)。这就是我为使我的 sfml 项目在 clion 中运行所做的工作:

  1. 添加C:\SFML\bin到我的环境变量Path
  2. 修改CMakeLists.txt了我的 clion 的项目:

    cmake_minimum_required(VERSION 3.13)
    project(Hello_SFML)
    
    set(CMAKE_CXX_STANDARD 14)
    
    find_package(SFML 2.5 COMPONENTS graphics audio REQUIRED)
    add_executable(Hello_SFML main.cpp)
    target_link_libraries(Hello_SFML sfml-graphics sfml-audio)
    
于 2019-01-26T23:33:08.190 回答
0

如果您通过以下方式安装 SFML:

sudo apt-get install libsfml-dev

您将在 /usr/share/SFML/ 中找到路径

于 2018-05-01T21:52:36.740 回答