Visual Studio 2019配置SFML环境

    科技2022-07-10  94

    C++调用SFML库时的环境设置

    1.下载SFML文件2.创建C++项目3.设置链接器的输入4.配置系统文件5.开始进行测试6.输出结果如下

    1.下载SFML文件

    链接: https://www.sfml-dev.org/download.php.

    我使用的是Visual Studio 2019进行代码的开发和编辑,根据SFML的官网教程,我下载的是 SFML2.5.1 列表中包含的 Visual C++ 15 (2017) - 32-bit这个文件。下载后设置SFML文件的保存地址是 D:\SFML\SFML-2.5.1-windows-vc15-32-bit\SFML-2.5.1,打开该文件夹后显示如下。需要注意两个重要的文件,分别是include、lib以及bin文件夹,它们在之后的环境设置中需要用到。 1)include文件指的是需要在C++中设置附加包含目录的文件 2)lib文件是需要在连接器中设置附加库目录的文件 3)bin文件夹中主要是包含一些dll文件,需要放置在系统文件夹。

    2.创建C++项目

    1)新建一个C++控制台应用项目,命名为SFML_Visualization 2)通过资源管理器设置该项目的属性,具体如图。 有四处需要注意的地方 ①配置中的设置是所有配置 ②配置属性中选择C/C++ ③将右侧出现的附加包含目录设置为刚刚下载的SFML文件夹中的include文件夹 ④上方的平台设置为32位

    3)设置链接器 链接器对应的设置菜单就在C/C++的下一行,具体设置如下,不再赘述

    3.设置链接器的输入

    这里的操作步骤实际上是应该包含链接器设置当中的,但是由于这里有一部分设置比较容易出错,所以我当都将它分离到新的步骤。

    根据SFML的官方文档中描述, SFML包含五个组件 (system, window, graphics, network and audio), 每个组件都有对应的lib文件,因此需要设置在链接器 + 输入 + 其他依赖项中,添加你需要的所有 SFML 库。 以下是官方文档原文: The next step is to link your application to the SFML libraries (.lib files) that your code will need. SFML is made of 5 modules (system, window, graphics, network and audio), and there’s one library for each of them.Libraries must be added in the project’s properties, in Linker » Input » Additional Dependencies. Add all the SFML libraries that you need, for example “sfml-graphics.lib”, “sfml-window.lib” and "sfml-system.lib"

    需要强调的一点是sfml-xxx.lib在配置中应当设置Release属性,而 "sfml-xxx -d.lib"需要设置Debug属性。注意这两者的区别,有-d后缀的配置属性必须得是Debug,否则可能会引起错误。

    具体的设置操作如下图: 1)首先是设置Debug时的附加依赖项 将以下代码复制粘贴到附加依赖项当中,注意上面的环境配置是Debug设置。

    sfml-graphics-d.lib sfml-window-d.lib sfml-system-d.lib sfml-audio-d.lib sfml-network-d.lib

    2)设置Release配置下的附加依赖项,具体如下图 将以下代码复制粘贴到附加依赖项当中,注意上面的环境配置是Release设置。

    sfml-graphics.lib sfml-window.lib sfml-system.lib sfml-audio.lib sfml-network.lib

    上述两次设置在编辑后记得点击右下角的应用,否则可能会没有保存

    4.配置系统文件

    将下载好的SFML文件中bin目录下的dll文件添加到C:\Windows\System32和C:\Windows\SysWOW64中(直接复制这些dll文件粘贴到该两个文件中)

    5.开始进行测试

    使用官方文档中的代码:

    //官方代码如下: #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; }

    6.输出结果如下

    Processed: 0.066, SQL: 8