关于c++:VS2022-win10编译SFML26

44次阅读

共计 1971 个字符,预计需要花费 5 分钟才能阅读完成。

之前写过一篇 Clion 配置 C++/SFML 开发环境 (Win10),因为Clion 是免费的 IDE,收费的IDE 目前靠谱的抉择只有 Visual Studio,因而再写一篇基于Visual Studio 2022 的教程。因为 SFML 未提供编译好的基于 Visual Studio 2022 的版本,因而这里须要本人编译。

环境

  1. 操作系统: windows 10 版本 1909 (外部版本 18363.1646)
  2. IDE: Microsoft Visual Studio Community 2022 (64 位) 版本 17.2.5
  3. CMake: cmake-gui 3.24.0-rc2
  4. SFML: 2.6.x (Github 源码编译)

步骤

  1. Github 下载 2.6.x 分支的 SFML 源码
  2. 关上 CMake-gui,如图所示,抉择下载好SFML 源代码目录,任意设置一个 build 目录,而后点击Configure
  3. 抉择 Visual Studio 2022 作为generator,点击Finish
  4. 此时 Configure 开始执行,执行完 (Configuring done) 成会呈现红色的参数须要设置,如下图所示,个别都不必改,我这里把 CMAKE_INSTALL_PREFIX 改成另一个指定的目录,而后再次点击Configure
  5. 第二次 Configure 实现之后,不再有红色参数,点击旁边的Generate,执行实现后,点击Open Project
  6. 此时会关上 Visual Studio 2022,执行INSTALL -> 生成,即可把SFML 装置在指定的目录。
  7. 通过 Visual Studio 2022 再新建一个 CMake 我的项目,CMakeLists.txt内容如下

        cmake_minimum_required (VERSION 3.8)
        project("SFML2048")
    
        # 设置 SFML 目录
        set(SFML_DIR "D:\\Program Files\\SFML\\lib\\cmake\\SFML")
    
        find_package(SFML REQUIRED COMPONENTS audio network graphics window system)
    
        if (NOT SFML_FOUND)
            message(FATAL_ERROR "SFML NOT FOUND!")
        else()
            message("SFML FOUND!")
        endif()
    
        include_directories(${SFML_INCLUDE_DIR})
        add_executable (SFML2048 "SFML2048.cpp" "SFML2048.h")
        if (CMAKE_VERSION VERSION_GREATER 3.12)
        set_property(TARGET SFML2048 PROPERTY CXX_STANDARD 20)
        endif()
    
        target_link_libraries("SFML2048" sfml-main sfml-audio sfml-network sfml-graphics sfml-window sfml-system)
    
        # 把 DLL 复制到执行目录
        set(
            DLL_FILES
            "D:\\Program Files\\SFML\\bin\\sfml-graphics-2.dll"
            "D:\\Program Files\\SFML\\bin\\sfml-window-2.dll"
            "D:\\Program Files\\SFML\\bin\\sfml-system-2.dll"
        )
        foreach(DLL_FILE ${DLL_FILES})
            message("Found DLL to Copy: ${DLL_FILE}")
            add_custom_command(
                TARGET SFML2048 PRE_BUILD
                COMMAND ${CMAKE_COMMAND} -E copy ${DLL_FILE} ${CMAKE_BINARY_DIR}.
            )
        endforeach()
  8. 测试以下代码,执行胜利将绘制一个绿色的圆

        #include <SFML/Graphics.hpp>
    
        using namespace std;
    
        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;
        }
  9. 运行胜利

正文完
 0