欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SFML 和 Visual Studio

程序员文章站 2022-07-14 08:08:46
...

介绍
如果将SFML与Visual Studio IDE(Visual C ++编译器)一起使用,则本教程是您应该阅读的第一篇。它将说明如何配置SFML项目。

安装SFML
首先,您必须从下载页面下载SFML SDK 。

您必须下载与您的Visual C ++版本匹配的软件包。实际上,例如,使用VC ++ 10(Visual Studio 2010)编译的库与VC ++ 12(Visual Studio 2013)不兼容。如果没有针对您的Visual C ++版本编译的SFML软件包,则必须 自己构建SFML。

然后,您可以在任意位置解压缩SFML存档。不建议将头文件和库复制到Visual Studio的安装中,最好将库保留在它们自己的单独位置,尤其是在您打算使用同一库的多个版本或多个编译器的情况下。

创建和配置SFML项目
首先要做的是选择要创建哪种项目。建议选择“空项目”。对话框窗口提供了一些其他选项来自定义项目:仅当您知道如何使用预编译的头文件时,才选择“控制台应用程序”或“ Windows应用程序”。
就本教程而言,您应该创建一个main.cpp文件并将其添加到项目中,以便我们可以访问C ++设置(否则Visual Studio不知道您将在该项目中使用哪种语言。 )。稍后我们将说明要放入的内容。

现在我们需要告诉编译器在哪里可以找到SFML标头(.hpp文件),以及链接程序在哪里可以找到SFML库(.lib文件)。

在项目的属性中,添加:

SFML标头( / include)到C / C ++ 的路径 »常规»其他包含目录
SFML库( / lib)到链接器的路径 »常规»其他库目录
这些路径在Debug和Release配置中都是相同的,因此您可以为项目全局设置它们(“所有配置”)。
SFML 和 Visual Studio

用于设置搜索路径的对话框的屏幕截图

下一步是将应用程序链接到代码将需要的SFML库(.lib文件)。SFML由5个模块(系统,窗口,图形,网络和音频)组成,每个模块都有一个库。
必须在链接器»输入»其他依赖项的项目属性中添加库。添加所需的所有SFML库,例如“ sfml-graphics.lib”,“ sfml-window.lib”和“ sfml-system.lib”。
SFML 和 Visual Studio

设置项目库的对话框的屏幕截图

链接到与配置匹配的库很重要:“ sfml-xxx-d.lib”用于Debug,“ sfml-xxx.lib”用于Release。混合不良可能导致崩溃。

此处显示的设置将导致您的应用程序链接到SFML的动态版本,该版本需要DLL文件。如果要摆脱这些DLL并将SFML直接集成到可执行文件中,则必须链接到静态版本。静态SFML库带有“ -s”后缀:“ sfml-xxx-sd.lib”用于Debug,而“ sfml-xxx-s.lib”用于Release。
在这种情况下,您还需要在项目的预处理器选项中定义SFML_STATIC宏。
SFML 和 Visual Studio

定义SFML_STATIC宏的对话框的屏幕截图

从SFML 2.2开始,进行静态链接时,您还必须将所有SFML的依赖项也链接到您的项目。这意味着,例如,如果要链接sfml-window-s.lib或sfml-window-sd.lib,则还必须链接opengl32.lib,winmm.lib和gdi32.lib。其中一些依赖库可能已经在“继承的值”下列出,但是自己重新添加它们不会造成任何问题。

这是每个模块的依赖项,如果要链接SFML调试库,请如上所述添加-d:

模组 依存关系
SFML 和 Visual Studio

从表中您可能已经注意到SFML模块也可以相互依赖,例如sfml-graphics-s.lib都依赖于sfml-window-s.lib和sfml-system-s.lib。如果您静态链接到SFML库,请确保链接到有问题的库的依赖关系以及依赖关系的依此类推。如果依赖项链中缺少任何内容,则会出现链接器错误。

如果您有些困惑,请放心,对于初学者来说,所有与静态链接有关的信息都会使您不知所措。如果有些事情第一次对您不起作用,您可以继续尝试牢记上面所说的内容。如果仍然无法使用静态链接工作,则可以在FAQ和 论坛上查看有关静态链接的主题。

如果您不知道动态库(也称为共享库)和静态库之间的区别,并且不知道使用哪个库,则可以在Internet上搜索更多信息。关于它们有很多好的文章/博客/帖子。

您的项目已准备就绪,让我们现在编写一些代码以确保它可以正常工作。将以下代码放入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;
}

如果选择创建“ Windows应用程序”项目,则必须将代码的入口点设置为“ WinMain”而不是“ main”。由于它是Windows专用的,因此您的代码无法在Linux或macOS上编译,因此SFML提供了一种在这种情况下保留标准“主”入口点的方法:将项目链接到sfml-main模块(“ sfml-main-d调试中的“ .lib”,发行版中的“ sfml-main.lib”),就像链接sfml-graphics,sfml-window和sfml-system一样。

现在编译项目,如果链接到SFML的动态版本,请不要忘记将SFML DLL(它们位于<sfml-install-path / bin>中)复制到已编译的可执行文件所在的目录中。运行它,如果一切正常,您应该看到以下内容:
SFML 和 Visual Studio

Hello SFML应用程序的屏幕截图

如果使用sfml-audio模块(无论是静态还是动态),则还必须复制其所需的外部库的DLL,即OpenAL32.dll。
这些文件也可以在<sfml-install-path / bin>中找到。

文章链接:https://www.sfml-dev.org/tutorials/2.5/start-vc.php

相关标签: C++