【问题标题】:Compiling SFML for Visual Studio 2012 using CMake使用 CMake 为 Visual Studio 2012 编译 SFML
【发布时间】:2014-07-10 16:20:08
【问题描述】:

在我开始提问之前,我只想说明我希望 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 项目)时,它会弹出错误“文件' ' 不见了”

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

【问题讨论】:

    标签: c++ visual-studio-2012 sfml


    【解决方案1】:

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

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

    通常,编译项目的方式是简单地点击顶部栏的绿色箭头。这编译您的程序,生成一个可执行文件。然后,它运行该可执行文件。

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

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

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

    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 版本。

    【讨论】:

    • 感谢您的评论。我需要自己构建它,因为即使它切换到静态链接,从网站下载的链接默认情况下也是动态链接到运行时的。我想要静态的,我知道这很糟糕,但它不再需要人们安装 msvcrXXX.dll。我还有一个问题,不想膨胀。当我现在运行生成的 SFML 代码时,它运行良好。但是当我尝试在我自己的继承 sf::Drawable 的类上调用 sf::RenderWindow::draw 时,它会弹出错误“ESP 值未在函数调用中正确保存。还有更多帮助吗?
    • 您应该为此打开另一个问题 - 不要担心腹胀。更糟糕的是一个问题中有许多不相关的 cmets。
    猜你喜欢
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    相关资源
    最近更新 更多