https://powdertoy.co.uk/Wiki/index.php?title=Compiling_tpt%2B%2B_with_Visual_studio/zh&feed=atom&action=history Compiling tpt++ with Visual studio/zh - Revision history 2020-08-11T22:01:52Z Revision history for this page on the wiki MediaWiki 1.30.0 https://powdertoy.co.uk/Wiki/index.php?title=Compiling_tpt%2B%2B_with_Visual_studio/zh&diff=7690&oldid=prev TOC_Official: Add Simplified Chinese Version (Not accurate) 2020-04-12T13:38:02Z <p>Add Simplified Chinese Version (Not accurate)</p> <p><b>New page</b></p><div>{{Languages|Compiling tpt++ with Visual studio}}<br /> '''本翻译未经过验证,部分内容可能有误或与实际不符,详情请参看英文原版!'''<br /> <br /> 本页面是为你在Visual Studio上编译TPT的一个向导。如果你有任何问题,可以在[https://powdertoy.co.uk/Discussions/Categories/Topics.html?Category=5 The Powder Toy 论坛]上的开发帮助部分询问。如果你想使用旧的 tpt 编译教程(大概率不会),而不是 tpt++ 的教程,请在 [[Compiling_tpt_with_Visual_Studio_(old)|这里]]找到它。<br /> <br /> 编译TPT需要一些时间来配置环境,所以要有耐心,小心翼翼地按照说明来做。如果出现任何错误,90%的情况下,这意味着你错过了一个步骤或做错了什么。<br /> <br /> 在你能用未经修改的源码编译出TPT之前,建议不要编辑元素。<br /> <br /> 祝你们好运!<br /> <br /> ===== 获取源码 =====<br /> *转到http://github.com/The-Powder-Toy/The-Powder-Toy/<br /> * 应该有一个写着 &quot;zip &quot;的按钮,上面写着 &quot;zip &quot;的云状图标。这是一个直接链接到源代码的.zip。下载并解压到你要编译的位置。<br /> <br /> =====设置 =====<br /> *下载[https://www.visualstudio.com/downloads/ Visual C++ 2019社区版],因为它有很好的调试和自动编码工具。它是完全免费的;你需要一个Microsoft账户才能下载。<br /> * 在工作负载选项卡上,选择 &quot;桌面开发与C++&quot;。<br /> * 进入单独组件选项卡,向下滚动到 &quot;编译器、构建工具和运行时 &quot;部分,选择 &quot;Windows XP对C++的支持&quot;。<br /> * 在同一区域,选择 &quot;Windows 8.1 SDK&quot;(可能有不同的命名方式,如其他版本的Windows 10 SDK)。<br /> * 打开Visual Studio,选择 &quot;Windows 8.1 SDK&quot;。如果你计划使用它超过30天,你应该用你的Microsoft帐户注册它(你不需要支付任何费用,它是免费的)。<br /> * 下载[https://starcatcher.us/TPT/Required%20Libraries.zip Required Libraries.zip]。将内容解压到项目根目录下 (与.sln 文件的级别相同)。<br /> * 现在你需要安装Python来运行SCons和其他脚本。获取 Python 3 [https://www.python.org/ftp/python/3.6.5/python-3.6.5.exe 这里](此为3.6.5版本,如有需要,请在Python官网自行下载最新版本)。<br /> <br /> ==== 使用已有的项目文件 (推荐) ====<br /> * 双击vsproject.py文件,它会显示一个控制台窗口,然后消失。之后,应该会出现三个Visual Studio文件。<br /> * 打开Visual Studio解决方案文件(名称以.sln结尾的那个)。如果你使用的是最新版本的Visual Studio Community (例如2019年),请确保 &quot;将警告视为错误 &quot;选项设置为 &quot;否&quot;。你可以在属性 -&gt; C/C++ -&gt; 常规中找到这个选项。<br /> * 点击F5。这应该会编译(需要一些时间),同时启动TPT,它将会问第一次运行时通常会问的所有问题。熟悉的文件和文件夹,如Saves,stamps和powder.pref会出现在你的源代码文件夹中。<br /> * 如果你到此为止,你已经成功编译了一个干净的源码,可以开始修改了,万分感谢!<br /> <br /> ==== 自己制作项目文件(不推荐) ====<br /> <br /> 不建议大家手动设置项目。这很容易出错和编译错误。<br /> <br /> * 打开Visual Studio,按 &quot;文件&quot;&gt;&quot;新建&quot;&gt;&quot;从现有代码中新建项目&quot;。<br /> * 选择包含源代码的文件夹,而不是src/,而是包含src/,build/,include/和其他一些文件夹。给项目起个什么名字都行。单击 &quot;下一步&quot;。<br /> * 如果还没有选择Windows应用程序项目,请选择Windows应用程序项目,然后不勾选所有内容。单击 &quot;下一步&quot;。<br /> * 在预处理程序定义下,键入以下内容<br /> &lt;code&gt;<br /> WIN,<br /> X86,<br /> X86_SSE2,<br /> STABLE,<br /> GRAVFFT,<br /> LUACONSOLE,<br /> IGNORE_UPDATES,<br /> _SCL_SECURE_NO_WARNINGS<br /> &lt;/code&gt;<br /> <br /> 注意:如果编译时出现错误,请尝试手动输入错误,而不是复制粘贴。<br /> * 单击 &quot;完成&quot;。项目将被创建。<br /> * 在 Build &gt; Configuration Manager 下,打开 &quot;Active Solution Configuration: &quot;下的下拉框,将其更改为 &quot;Release&quot;。(除非你有很好的理由将其保留为 &quot;Debug&quot;,否则运行速度会比 &quot;Release&quot;慢)。<br /> * 转到 &quot;项目&quot;&gt;&quot;属性&quot;。<br /> * 在最上面的 &quot;配置。活动(Release),打开下拉菜单,将其改为 &quot;所有配置&quot;。如果你想切换到调试模式,这将使其更容易。<br /> * 在 &quot;配置属性&quot;&gt;&quot;常规 &quot;下。<br /> * 更改输出目录,从<br /> &lt;code&gt;$(SolutionDir)$(Configuration)\&lt;/code&gt;<br /> 到 <br /> &lt;code&gt;$(SolutionDir)Build\&lt;/code&gt;<br /> (注意&quot;$(SolutionDir) &quot;和 &quot;Build/&quot;之间没有反斜线)。<br /> * 将目标名称改成你希望编译后的文件的名称,除去&quot;.exe &quot;扩展名。(或者直接将其作为项目名称来命名)<br /> * 在 &quot;配置属性&quot;&gt;&quot;VC++目录 &quot;下。<br /> * 打开Include Directories的下拉菜单(如果你没有看到打开下拉菜单的箭头,请尝试点击该行),点击&quot;&lt;编辑...&gt;&quot;,然后添加<br /> $(ProjectDir)includes<br /> $(ProjectDir)includes\SDL2<br /> $(ProjectDir)includes\luajit-2.0<br /> $(ProjectDir)data<br /> $(ProjectDir)src<br /> $(ProjectDir)generated<br /> $(ProjectDir)resources<br /> <br /> (准确地键入----同时注意,&quot;$(ProjectDir) &quot;和 &quot;include &quot;之间没有反斜线)。<br /> * 打开库目录的下拉菜单,点击&quot;&lt;编辑...&gt;&quot;,并添加<br /> <br /> &lt;code&gt; $(ProjectDir)Libraries&lt;/code&gt;<br /> <br /> (注意,&quot;$(ProjectDir) &quot;和 &quot;Libraries &quot;之间没有反斜线)<br /> * 转到配置属性 &gt; C/C++。<br /> * 在 &quot;常规 &quot;下,打开 &quot;警告级别 &quot;的下拉菜单,选择 &quot;Level1 (/W1)&quot;。这将使你在编译过程中遇到任何错误时更容易,因为你不需要通过一堆不重要的警告来找到错误。<br /> * 在 &quot;常规 &quot;下,打开 &quot;多处理器编译 &quot;的下拉菜单,选择 &quot;是(/MP)&quot;。这将使编译器使用多个内核,而不是只有一个内核,这将有助于加快编译时间。<br /> * 如果您使用的是最新版本的Visual Studio Community (例如2019年),请确保 &quot;常规 &quot;下的 &quot;将警告视为错误 &quot;选项设置为 &quot;否&quot;。<br /> * 在 &quot;代码生成 &quot;下,打开 &quot;浮点模型 &quot;的下拉菜单,将其设置为 &quot;快速&quot;。这将使你的速度明显提高)。另外,在它的右上方,将 &quot;Enable Enhanced Instruction Set &quot;改为SSE2。<br /> * 转到 &quot;配置属性&quot;&gt;&quot;链接器&quot;&gt;&quot;输入&quot;。<br /> * 打开下拉菜单中的 &quot;附加依赖项&quot;,点击&quot;&lt;编辑...&gt;&quot;,然后输入以下文本<br /> shell32.lib<br /> ws2_32.lib<br /> SDL2.lib<br /> SDL2main.lib<br /> libbz2.lib<br /> pthreadVC2.lib<br /> luajit2.0.lib<br /> libfftw3f-3.lib<br /> zlib.lib<br /> <br /> * 按下 &quot;确定 &quot;键,直到关闭项目属性。<br /> * 按键盘上的F7键,或者点击Build &gt; Build Solution。你也可以点击绿色的 &quot;开始调试 &quot;箭头。<br /> * 如果出了问题(例如,你得到一个错误),请在[https://powdertoy.co.uk/Discussions/Categories/Topics.html?Category=5 Powder Toy论坛]上询问。<br /> * 在你的源代码目录下的 &quot;Build &quot;文件夹中可以找到可执行程序和所需的DLLs。<br /> <br /> ===== 可选:静态编译 =====<br /> 当静态编译TPT时,你不需要有DLLs来运行它,也不需要随项目一起分发。官方的TPT是这样做的。但它需要较长的时间来编译,所以你可能只想在发布版本中使用。<br /> <br /> 如果你使用的是预制项目,它已经内置了静态选项。在顶部栏中,点击 &quot;调试 &quot;的下拉菜单,选择 &quot;静态&quot;,然后按F7键,用这个新设置再次编译TPT。就这样,你就大功告成了;如果你是自己做的项目,请继续阅读本节。<br /> * 在Build &gt; Configuration Manager下,进入Active Solution Configuration下,点击New。将它命名为静态(或任何你想叫它的名字),然后选择从 &quot;发布 &quot;中复制设置。另外,别忘了把默认模式从X64改成X86。<br /> * 在 &quot;配置属性&quot;&gt;VC++目录下,打开下拉菜单中的库目录,点击&quot;&lt;编辑...&gt;&quot;,将其从&lt;code&gt;$(ProjectDir)Libraries&lt;/code&gt;改为: &lt;code&gt;$(ProjectDir)Staticlibs&lt;/code&gt;。<br /> * 转到 Configuration Properties(配置属性)&gt; Linker(链接器)&gt; Input(输入),打开下拉菜单 &quot;Additional Dependencies&quot;,然后点击&quot;&lt;Edit...&gt;&quot;,将这些添加到列表中。<br /> <br /> PTW32_STATIC_LIB<br /> ZLIB_WINAPI<br /> <br /> * 在 &quot;代码生成 &quot;下,将 &quot;运行时库 &quot;改为 &quot;多线程(/MT)&quot;<br /> * 转到 &quot;配置属性&quot;&gt;链接器&gt;高级,将 &quot;Image Has Safe Exception Handlers &quot;改为 &quot;No (/SAFESEH:NO)&quot;<br /> <br /> 你现在可以轻松地在 &quot;调试 &quot;模式和 &quot;静态 &quot;模式之间进行切换,在 &quot;调试 &quot;模式下编译,用于快速、正常的测试,而在 &quot;静态 &quot;模式下编译,用于发布一个exe供人们使用。<br /> <br /> ===== 可选:设置 Git =====<br /> 如果你使用GitHub,你可以很容易地保持最新的变化。这样一来,你的mod就不会过时了,你也不用为了更新到新版本而把所有的东西都复制过来。<br /> 你可以在[[Github_Setup|这里]]中找到教程。<br /> <br /> ===== 添加新元素 =====<br /> * '''双击'''newelement.py。这将打开一个控制台窗口,要求输入一个元素的名称,这个名称应该只包含大写字母、数字和连字符(你可以在菜单中显示一个更奇特的名称,但不建议使用)。输入元素的名称,然后按回车键。你会被要求在 src/simulation/ElementNumbers.h 中添加一段代码;当你完成后按回车键,窗口将关闭,你的元素将被创建:它的源码将显示为 src/simulation/elements/NAME.cpp。<br /> * 在Visual Studio中,在Solution Explorer中导航到The-Powder-Toy/src/simulation/elements,然后添加新创建的.cpp文件(最好是添加到正确的子文件夹中)(具体方法请参见[https://powdertoy.co.uk/Wiki/W/Coding-tutorial.html#Step_One:_Defining_the_Element]),然后按F7键,用新元素再次编译TPT。这将需要相对较长的时间。<br /> * 每当你改变这个文件中的东西时,按F7来编译(或按F5来编译并运行)TPT。如果你只修改这个文件,编译的时间会比添加新元素时短很多。<br /> <br /> ===== 移除新元素 =====<br /> <br /> * 在Solution Explorer中右击元素的.cpp文件,在弹出的对话框中选择删除。<br /> * 撤销你在创建元素时应用的newelement.py所做的更改;换句话说,从src/simulation/ElementNumbers.h中删除相关的代码。<br /> * 在Visual Studio中,点击F7来重新编译TPT,不需要元素。<br /> <br /> ===== 让 TPT 更快 =====<br /> <br /> 你可能已经注意到,你刚编译的TPT的性能至少可以说是糟糕透顶。要解决这个问题,点击顶部栏上的 &quot;调试 &quot;的下拉菜单,选择 &quot;释放&quot;,然后点击F7再次编译TPT。<br /> <br /> 这样一来,你基本上是用调试的方便性换取了速度,这意味着虽然TPT会变得更快,但如果出现了严重的bug,而Visual Studio恰好赶上了崩溃,你将无法弄清楚为什么会发生这种情况,至少不容易。当这种情况发生时,只需切换回Debug,重新编译并尝试重现崩溃。<br /> <br /> ===== (过时)SCons =====<br /> 你可以在命令行中使用SCons来用visual studio编译器编译。这个选项在大多数情况下可能没有什么用,但还是有的。使用命令 &quot;scons.py --msvc&quot;,它将尝试找到并使用32位msvc编译器。它支持SConscript中的大部分选项,包括 --static,它可以生成完全静态的二进制文件(甚至不需要msvcr120.dll,但本指南需要)。<br /> <br /> [[Category:开发]]<br /> [[Category:编译]]</div> TOC_Official