Compiling tpt++ with Visual studio/zh

From The Powder Toy
Revision as of 05:22, 17 August 2021 by TOC_Official (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
Language: English  • 中文

该教程已过时,请使用Meson编译TPT.

本翻译只经过初步验证,部分内容可能有误或与实际不符,详情请参看英文原版!

本页面是为你在Visual Studio上编译TPT的一个向导。如果你有任何问题,可以在The Powder Toy 论坛上的开发帮助板块询问。如果你想编译旧版TPT(不,你不想),而不是 TPT++(现在使用的版本),请遵照这里的步骤编译。

编译TPT需要一些时间来配置环境,所以要有耐心,小心翼翼地按照说明来做。如果出现任何错误,90%的情况下,这意味着你错过了一个步骤或者犯了一些难以察觉的错误

忠告:在你能用未经修改的源码编译出TPT之前,建议不要编辑元素。

祝你好运!

获取源码
  • 转到[Powder Toy Github Page]获取源码;
  • 页面中应该有一个写着 "zip "的按钮,上面写着 "zip "的云状图标。这是一个直接链接到源代码的.zip。下载并解压到你要编译的位置。(若无法打开网页请使用VPN等工具进行访问, 同样的, 可以使用Github代下载服务下载源码)
VS的设置
  • 下载Visual C++ 2019社区版,VS提供了很好的调试和自动编译工具。它是完全免费的;
  • 在工作负载选项卡上,选择 "桌面开发与C++";
  • 进入单独组件选项卡,向下滚动到 "编译器、构建工具和运行时 "部分,选择 "Windows XP对C++的支持";
  • 在同一区域,选择 "Windows 10 SDK"(可能有不同的命名方式,如其他版本的Windows XX SDK);
  • 打开Visual Studio,选择 "Windows 10 SDK"。如果你计划使用它超过30天,你应该用你的Microsoft帐户注册它(你不需要支付任何费用,它是免费的);
  • 下载Required Libraries.zip,将内容解压到项目根目录下 (与.sln 文件的级别相同);
  • 现在你需要安装Python来运行SCons和其他脚本。获取 Python 3点击此处(此为3.6.5版本,如有需要,请在Python官网自行下载最新版本)。

使用已有的项目文件 (推荐)

  • 双击vsproject.py文件,它会显示一个控制台窗口,然后消失。之后,应该会出现三个Visual Studio文件。
  • 打开Visual Studio解决方案文件(名称以.sln结尾的那个)。如果你使用的是最新版本的Visual Studio Community (例如2019年),请确保 "将警告视为错误 "选项设置为 "否"。你可以在属性 -> C/C++ -> 常规中找到这个选项。
  • 点击F5。这应该会编译(需要一些时间),同时启动TPT,它将会问第一次运行时通常会问的所有问题。熟悉的文件和文件夹,如Saves,stamps和powder.pref会出现在你的源代码文件夹中。
  • 如果你到此为止,你已经成功编译了一个未经修改的源码,可以开始进行修改了,非常棒!

自己制作项目文件(不推荐且未经测试)

不建议大家手动设置项目。这样很容易出现编译错误。

  • 打开Visual Studio,按 "文件">"新建">"从现有代码中新建项目"。
  • 选择包含源代码的文件夹,而不是src/,而是包含src/,build/,include/和其他一些文件夹。给项目起个什么名字都行。单击 "下一步"。
  • 如果还没有选择Windows应用程序项目,请选择Windows应用程序项目,然后不勾选所有内容。单击 "下一步"。
  • 在预处理程序定义下,键入以下内容

WIN, X86, X86_SSE2, STABLE, GRAVFFT, LUACONSOLE, IGNORE_UPDATES, _SCL_SECURE_NO_WARNINGS

注意:如果编译时出现错误,请尝试手动输入错误,而不是复制粘贴。

  • 单击 "完成"。项目将被创建。
  • 在 Build > Configuration Manager 下,打开 "Active Solution Configuration: "下的下拉框,将其更改为 "Release"。(除非你有很好的理由将其保留为 "Debug",否则运行速度会比 "Release"慢)。
  • 转到 "项目">"属性"。
  • 在最上面的 "配置。活动(Release),打开下拉菜单,将其改为 "所有配置"。如果你想切换到调试模式,这将使其更容易。
  • 在 "配置属性">"常规 "下。
  • 更改输出目录,从

$(SolutionDir)$(Configuration)\$(SolutionDir)Build\ (注意"$(SolutionDir) "和 "Build/"之间没有反斜线)。

  • 将目标名称改成你希望编译后的文件的名称,除去".exe "扩展名。(或者直接将其作为项目名称来命名)
  • 在 "配置属性">"VC++目录 "下。
  • 打开Include Directories的下拉菜单(如果你没有看到打开下拉菜单的箭头,请尝试点击该行),点击"<编辑...>",然后添加
$(ProjectDir)includes
$(ProjectDir)includes\SDL2
$(ProjectDir)includes\luajit-2.0
$(ProjectDir)data
$(ProjectDir)src
$(ProjectDir)generated
$(ProjectDir)resources

(准确地键入----同时注意,"$(ProjectDir) "和 "include "之间没有反斜线)。

  • 打开库目录的下拉菜单,点击"<编辑...>",并添加

$(ProjectDir)Libraries

(注意,"$(ProjectDir) "和 "Libraries "之间没有反斜线)

  • 转到配置属性 > C/C++。
  • 在 "常规 "下,打开 "警告级别 "的下拉菜单,选择 "Level1 (/W1)"。这将使你在编译过程中遇到任何错误时更容易,因为你不需要通过一堆不重要的警告来找到错误。
  • 在 "常规 "下,打开 "多处理器编译 "的下拉菜单,选择 "是(/MP)"。这将使编译器使用多个内核,而不是只有一个内核,这将有助于加快编译时间。
  • 如果您使用的是最新版本的Visual Studio Community (例如2019年),请确保 "常规 "下的 "将警告视为错误 "选项设置为 "否"。
  • 在 "代码生成 "下,打开 "浮点模型 "的下拉菜单,将其设置为 "快速"。这将使你的速度明显提高)。另外,在它的右上方,将 "Enable Enhanced Instruction Set "改为SSE2。
  • 转到 "配置属性">"链接器">"输入"。
  • 打开下拉菜单中的 "附加依赖项",点击"<编辑...>",然后输入以下文本
shell32.lib
ws2_32.lib
SDL2.lib
SDL2main.lib
libbz2.lib
pthreadVC2.lib
luajit2.0.lib
libfftw3f-3.lib
zlib.lib
  • 按下 "确定 "键,直到关闭项目属性。
  • 按键盘上的F7键,或者点击Build > Build Solution。你也可以点击绿色的 "开始调试 "箭头。
  • 如果出了问题(例如,你得到一个错误),请在Powder Toy论坛上询问。
  • 在你的源代码目录下的 "Build "文件夹中可以找到可执行程序和所需的DLLs。
可选:静态编译

当静态编译TPT时,你不需要DLLs来运行,也不需要随项目一起分发。官方的TPT是这样做的。但它需要较长的时间来编译,所以你可能只想在发布版本中使用。

如果你使用的是预制项目,它已经内置了静态选项。在顶部栏中,点击 "调试 "的下拉菜单,选择 "静态",然后按F7键,用这个新设置再次编译TPT。就这样,你就大功告成了;如果你是自己做的项目,请继续阅读本节。

  • 在Build > Configuration Manager下,进入Active Solution Configuration下,点击New。将它命名为静态(或任何你想叫它的名字),然后选择从 "发布 "中复制设置。另外,别忘了把默认模式从X64改成X86。
  • 在 "配置属性">VC++目录下,打开下拉菜单中的库目录,点击"<编辑...>",将其从$(ProjectDir)Libraries改为: $(ProjectDir)Staticlibs
  • 转到 Configuration Properties(配置属性)> Linker(链接器)> Input(输入),打开下拉菜单 "Additional Dependencies",然后点击"<Edit...>",将这些添加到列表中。
PTW32_STATIC_LIB
ZLIB_WINAPI
  • 在 "代码生成 "下,将 "运行时库 "改为 "多线程(/MT)"
  • 转到 "配置属性">链接器>高级,将 "Image Has Safe Exception Handlers "改为 "No (/SAFESEH:NO)"

你现在可以轻松地在 "调试 "模式和 "静态 "模式之间进行切换,在 "调试 "模式下编译,用于快速、正常的测试,而在 "静态 "模式下编译,用于发布一个exe供人们使用。

可选:设置 Git

如果你使用GitHub,你可以很容易地保持最新的变化。这样一来,你的mod就不会过时了,你也不用为了更新到新版本而把所有的东西都复制过来。 你可以在这里中找到教程。

添加新元素
  • 双击newelement.py。这将打开一个控制台窗口,要求输入一个元素的名称,这个名称应该只包含大写字母、数字和连字符(你可以在菜单中显示一个更奇特的名称,但不建议使用)。输入元素的名称,然后按回车键。你会被要求在 src/simulation/ElementNumbers.h 中添加一段代码;当你完成后按回车键,窗口将关闭,你的元素将被创建:它的源码将显示为 src/simulation/elements/NAME.cpp。
  • 在Visual Studio中,在Solution Explorer中导航到The-Powder-Toy/src/simulation/elements,然后添加新创建的.cpp文件(最好是添加到正确的子文件夹中)(具体方法请参见[1]),然后按F7键,用新元素再次编译TPT。这将需要相对较长的时间。
  • 每当你改变这个文件中的东西时,按F7来编译(或按F5来编译并运行)TPT。如果你只修改这个文件,编译的时间会比添加新元素时短很多。
移除新元素
  • 在Solution Explorer中右击元素的.cpp文件,在弹出的对话框中选择删除。
  • 撤销你在创建元素时应用的newelement.py所做的更改;换句话说,从src/simulation/ElementNumbers.h中删除相关的代码。
  • 在Visual Studio中,点击F7来重新编译TPT,不需要元素。
让 TPT 更快

你可能已经注意到,你刚编译的TPT的性能至少可以说是糟糕透顶。要解决这个问题,点击顶部栏上的 "调试 "的下拉菜单,选择 "Release",然后点击F7再次编译TPT。

这样一来,你基本上是用调试的方便性换取了速度,这意味着虽然TPT会变得更快,但如果出现了严重的bug,而Visual Studio恰好赶上了崩溃,你将无法弄清楚为什么会发生这种情况,至少不容易。当这种情况发生时,只需切换回Debug,重新编译并尝试重现崩溃。

(过时)SCons

你可以在命令行中使用SCons来用visual studio编译器编译。这个选项在大多数情况下可能没有什么用,但还是有的。使用命令 "scons.py --msvc",它将尝试找到并使用32位msvc编译器。它支持SConscript中的大部分选项,包括 --static,它可以生成完全静态的二进制文件(甚至不需要msvcr120.dll,但本指南需要)。