带有 MinGW 版本 8.2.0 和 Atom 文本编辑器的 C++ SFML

C++ SFML with MinGW version 8.2.0 and Atom text editor

我正在尝试学习使用带有 SFML 库的 C++ 制作 2d 游戏。我正在使用 windows,但我更愿意使用 Atom 文本编辑器而不是 Visual Studio。我对如何做到这一点做了很多研究,但我仍然不知道如何将 SFML 库与 Atom 一起使用。那么,我将如何在我用 Atom 编写的 c++ 项目中实现 SFML 库。谢谢!


你需要 Atom Packages

因此,我目前正在为 Atom 上的 SFML 编译开发一个新包。 我只需要编写文档并将其作为 Atom 包,但请查看存储库:https://github.com/brhaka/sfml-compiler

您可以投稿,或者只是加星 :)

我正在努力尽快发布,所以我建议你稍等一下。还有另一个包,但没有文档。

你的名字真好听!


希望对您有所帮助!

布拉卡

这个答案假定您已经下载了 SFML 的 32 位 MinGW 版本,并且您想要从命令行1 编译用 Atom 编写的程序。在您刚刚下载的 SFML 文件夹中,有三个对我们来说很重要的文件夹:bin、lib 和 include。

  • bin 文件夹包含 DLL。在这个答案中,我只打算谈论动态 linking 到 SFML,因为那是我的经验。要 运行 任何使用 SFML 构建的动态 linked 可执行文件,您需要将所有相关的 DLL 复制到与可执行文件相同的文件夹中。 (哪些是相关的?最简单的解决方案是将它们全部复制。2

  • lib 文件夹包含库(扩展名为 .a 的文件)。如果您转到安装 MinGW 的文件夹(默认为 C:\MinGW),然后按照路径 \lib\gcc\mingw32.2.0,您应该在一个包含几个子文件夹、一些 .o 文件和一堆 .a 文件。将 SFML lib 文件夹中的所有文件复制到此处。现在 MinGW 知道 SFML 库了。

  • 最后,include 文件夹包含一个名为 SFML 的文件夹,其中包含所有 SFML header 文件。复制 SFML 文件夹。现在还记得我们在最后一步中将所有 .a 文件转储到的文件夹吗?该文件夹应该有一个名为 include 的子文件夹,其中包含一个名为 C++ 的文件夹,其中包含所有标准 C++ headers(iostream、算法等)。将我们刚才选择的 SFML 文件夹粘贴到该 C++ 文件夹中。 (不是文件夹的 contents,而是文件夹本身。)现在 MinGW 知道 SFML headers,所以我们可以安全地输入例如#include <SFML/Graphics.hpp>

例如,要编译 this tutorial 末尾的文件 main.cpp 并使用 Atom 动态地 link 它,您将 运行 命令 g++ main.cpp -lsfml-graphics -lsfml-window -lsfml-system 在 cmd.exe.

里面

免责声明: 复制库和包含文件夹 不是 SFML 推荐的方法。相反,他们建议使用命令行参数来告诉 g++ 去哪里查找。但是 IMO (1) 他们的方法对 first-time 用户来说更痛苦,并且 (2) first-time 用户不太可能使用多个编译器或多个版本的 SFML。 (如果您正在使用多个编译器或多个版本的 SFML,您将希望按他们的方式进行。在这种情况下请告诉我,我会尽力提供帮助。)


1) 您实际上可能希望通过单击按钮(默认为 F5?)直接在 Atom 中进行编译。如果您已经知道如何在 Atom 中直接编译 non-SFML 应用程序,那么我认为以上应该足以让您也编译 SFML 应用程序,只要您在 Atom 中适当地设置默认编译器标志即可。 (我的意思是:对于上面的示例,您的标志应依次包括 -lsfml-graphics-lsfml-window-lsfml-system

2) 要确定您需要哪些 DLL,您可以将它们全部添加并开始删除它们,直到您的应用程序无法运行。或者,记住以下三点:

  • 你总是需要openal32.dll
  • 您需要在编译时link编辑到的 DLL
  • 如果你在调试模式下编译,你需要带有“-d”的版本(例如sfml-graphics-d-2.dll),否则你需要没有它的版本

所以在上面的例子中,你只需要openal32.dll、sfml-graphics-2.dll、sfml-window-2.dll和sfml-system-2.dll.