共计 1971 个字符,预计需要花费 5 分钟才能阅读完成。
之前写过一篇 Clion
配置 C++/SFML
开发环境 (Win10
),因为Clion
是免费的 IDE
,收费的IDE
目前靠谱的抉择只有 Visual Studio
,因而再写一篇基于Visual Studio 2022
的教程。因为 SFML
未提供编译好的基于 Visual Studio 2022
的版本,因而这里须要本人编译。
环境
- 操作系统:
windows 10 版本 1909 (外部版本 18363.1646)
- IDE:
Microsoft Visual Studio Community 2022 (64 位) 版本 17.2.5
- CMake:
cmake-gui 3.24.0-rc2
- SFML:
2.6.x (Github 源码编译)
步骤
- 从
Github
下载2.6.x
分支的SFML
源码 - 关上
CMake-gui
,如图所示,抉择下载好SFML
源代码目录,任意设置一个build
目录,而后点击Configure
- 抉择
Visual Studio 2022
作为generator
,点击Finish
- 此时
Configure
开始执行,执行完 (Configuring done
) 成会呈现红色的参数须要设置,如下图所示,个别都不必改,我这里把CMAKE_INSTALL_PREFIX
改成另一个指定的目录,而后再次点击Configure
- 第二次
Configure
实现之后,不再有红色参数,点击旁边的Generate
,执行实现后,点击Open Project
- 此时会关上
Visual Studio 2022
,执行INSTALL
-> 生成,即可把SFML
装置在指定的目录。
-
通过
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()
-
测试以下代码,执行胜利将绘制一个绿色的圆
#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; }
- 运行胜利
正文完