使用 CMake 为 Visual Studio 2012 编译 SFML

2024-01-16

在开始提问之前,我只想澄清一下,我希望 SFML 能够静态链接到 runetime,因为我想静态链接 mvsc.dll,这样就没有人需要安装它们或依赖它们。

我成功地从网站上完成了这项工作,但它也有同样的问题。

到问题了。我从 github 下载了 SFML 作为 zip,解压它。然后,我通过 Visual Studio 命令提示符启动 cmake-gui,正确填写路径,并配置它,以便取消选中 BUILD_SHARED_LIBS 并选中 SFML_USE_STATIC_STD_LIBS。之后我生成了代码。

问题就从这里开始了。当我尝试编译任何生成的项目(ALL_BUILD、ZERO_CHECK、SFML)时,它会生成所有库,但是当它超过该库时(不知道它在内部如何工作),Visual Studio 会弹出错误:“无法启动程序 'H:/SFML /SFML-静态/发布/ALL_BUILD'。”这是不存在的(Release 和 Debug 文件夹都是空的)。我认为正因为如此,我没有得到包含文件夹(它没有生成,并且 CMake 项目中没有它的标志)。

有没有办法来解决这个问题?或者我应该从 github 源复制 include 文件夹吗?

另外,我不知道我是否应该在 src/SFML 内运行项目,但是当我尝试(例如 INSTALL 或 sfml-system)编译它们(它们都是 Visual 项目)时,它会弹出错误“file ' ' is丢失的”

一些见解会很好,因为我已经花了 2 个小时来解决这个问题。


听起来您对 CMake 生成的项目的正确使用感到困惑。

问题就从这里开始了。当我尝试编译任何生成的项目(ALL_BUILD、ZERO_CHECK、SFML)时,它会生成所有库,但是当它超过该库时(不知道它在内部如何工作),Visual Studio 会弹出错误:“无法启动程序 'H:/SFML /SFML-静态/发布/ALL_BUILD'。”这是不存在的(Release 和 Debug 文件夹都是空的)。

通常,编译项目的方法是简单地点击顶部栏向上的绿色箭头。这compiles您的程序,生成可执行文件。那么,它runs那个可执行文件。

当您在 SFML 项目中点击 VS 中的绿色箭头时,它仍然会编译它。听起来这一步很成功,因为你说库已经生成了。接下来,它尝试运行生成的可执行文件。然而,SFML 不生成可执行文件,因为它是一个图书馆。它只是供您使用的类和函数的集合;没有可运行的代码。因此,当 VS 尝试运行生成的可执行文件时,它会出错,因为一开始就没有生成可执行文件。

“修复”此问题的方法是,无需单击运行按钮,只需右键单击 SFML 项目并单击“构建”即可。这将编译该项目,但不会尝试运行该项目。

我认为正因为如此,我没有得到包含文件夹(它没有生成,并且 CMake 项目中没有它的标志)。有没有办法来解决这个问题?或者我应该从 github 源复制 include 文件夹吗?

Visual Studio 不需要生成包含文件夹。它与 github 源代码中的完全相同。但是,您也不应该将此文件夹复制到您自己的项目中。添加要访问的包含目录的正确方法Tools / Options / Projects and Settings / VC++ Directories / Include files并将 SFML 包含目录添加到此属性。然后,您的项目将知道在哪里寻找包含内容,以及诸如#include "SFML/System.hpp"将工作。

在开始提问之前,我只想澄清一下,我希望 SFML 能够静态链接到 runetime,因为我想静态链接 mvsc.dll,这样就没有人需要安装它们或依赖它们。

您可能不需要自己编译 SFML 来执行此操作。我相信您可以通过以下方式切换到在您自己的项目中使用静态库configuration properties / c/c++ / code generation / [Runtime Library]并更改该选项;那么,每次新版本出现时,您就不必依赖使用静态 C++ 库编译 SFML 版本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 CMake 为 Visual Studio 2012 编译 SFML 的相关文章