Building TPT with Meson/zh
Language: | English • 한국어 • 中文 |
---|
本文将指导你编译The Powder Toy. 如果你有任何疑问,请在TPT论坛中的开发协助板块提问。
编辑注记:请勿在未经咨询TPT开发者的情况下修改本指南。否则你的修改有可能在没有事先通知的情况下被无情地退回。 译者注记:该部分翻译未经验证,如有问题请遵照英文原版。
Contents
Windows
在Windows 10上测试。
环境搭建
- 安装Git (下载链接)
- 安装时不要改动选项
- 安装Python 下载链接)
- 建议允许安装程序将Python添加到PATH中,并禁用路径长度限制(该选项在安装过程结束时出现)
- 打开一个管理员命令提示符(在开始菜单中搜索 "cmd",右击它,点击 "以管理员身份运行")并执行以下命令
python -m pip install --upgrade pip pip install --upgrade meson ninja
- 安装Visual Studio (下载链接)
- 选择桌面开发的安装组件
- 你只需要 "MSVC "和 "Windows 10 SDK",所以你可以在右边的列表中取消勾选其他选项
- 在开始菜单中找到 "x64 Native Tools Command Prompt for VS"(或类似的应用,以下简称 "VS提示符")并执行以下命令
- 建议将生成的窗口固定到你的任务栏上;你将经常使用它来构建TPT
cd /d [你保存源码仓库的路径] git clone https://github.com/The-Powder-Toy/The-Powder-Toy
第一次构建
- 打开VS提示符(见上文)并执行以下命令
cd /d [你保存源码仓库的路径] cd The-Powder-Toy meson build-debug cd build-debug ninja
- 你可能会在所有这些过程中看到一些警告,但应该没有错误(如果你在任何阶段看到警告,不要跳过它;而是记录下来,在论坛向我们询问)
- 如果你不确定是否成功,再次运行ninja;如果显示 "no work to do",说明一切正常。
- 现在,可以从提示符下运行TPT
powder.exe
使用Visual Studio IDE
上面的方法不能让你使用Visual Studio的 "Visual "部分,即IDE。尽管Meson对这种使用情况的支持有限,但如果由于某种原因你希望使用IDE,你可以要求Meson生成一个使用Visual Studio而不是Ninja的构建项目。
- 打开VS提示符(见上文),执行以下命令
cd /d [你保存源码仓库的路径] cd The-Powder-Toy meson --backend=vs -Dbackend_startup_project=powder build-debug-vs
- 在这之后,你不再需要使用VS提示符。
这将生成一个包含Visual Studio解决方案的构建项目(the-powder-toy.sln
)。你可以像其他解决方案一样使用它,但有几个关键的区别。
- 集成开发环境只能用于更舒适的编辑和调试,而不能用于其他方面,包括改变项目结构;你必须熟悉Meson并使用
meson.build
文件才能做到这一点。 - 一旦你真正改变了
meson.build
文件,Meson就会在你下次试图构建它时自动重新生成解决方案;Visual Studio会给你一个关于解决方案被改变的可怕的弹出窗口,这是很正常的,只要点击 "重新加载解决方案 "即可。 - 你目前看到的配置(很可能是
debug|x64
,如果你完全按照这个指南来做的话)是解决方案的唯一配置,不建议添加其他配置,因为Meson在下次重新生成解决方案时只会覆盖它们;相反,你必须用Meson生成单独的构建项目。
MacOS
在MacOS 10.15和11.5上测试。
环境搭建
- 安装Homebrew (下载链接)
在下一步,会使用xcode-select
;注意,你不需要安装Xcode来运行该命令
- 在终端中,执行以下命令
xcode-select --install # 征求你的确认,安装编译器 sudo -H python -m pip install --upgrade pip # 如果你得到 "没有名为pip的模块",尝试python3 sudo -H pip install --upgrade meson ninja brew install pkg-config luajit fftw sdl2 cd [你保存代码仓库的路径] git clone https://github.com/The-Powder-Toy/The-Powder-Toy
第一次构建
-
cd
到版本库根目录并执行以下命令
meson build-debug cd build-debug ninja
- 在整个过程中,你可能会看到一些警告,但应该没有错误(如果你在任何阶段看到,不要试图跳过它;而是记录下来,在论坛上向我们询问 。
- 如果你不确定,再次运行Ninja;如果它说 "no work to do",说明一切正常。
- 现在,可以从提示符中运行TPT
./powder
Linux
在Ubuntu 20.04和Raspbian 10上测试。
所需的环境设置
- 确保你的软件包列表是最新的(命令,
sudo apt update
)。 - 安装git (命令,
sudo apt install git
) - 安装python(命令,
sudo apt install python3
)。 - 安装pip,如果不存在的话(参考他们的教程)。
- 升级pip (命令:
sudo -H python3 -m pip install --upgrade pip
) - 安装Meson和Ninja,如果不存在的话(命令,
sudo -H pip install --upgrade meson ninja
)。 - 可以选择安装ccache(命令,
sudo apt install ccache
)。 - 安装一个库工具(命令,
sudo apt install pkg-config
) - 安装所需的库(命令:
sudo apt install libluajit-5.1-dev libcurl4-openssl-dev libfftw3-dev zlib1g-dev libsdl2-dev
)- 你的软件包管理器可能会用完全不同的名字打包这些东西
- 下载源代码(命令,
git clone https://github.com/The-Powder-Toy/The-Powder-Toy
)。
初次构建
-
cd
到版本库根目录并执行以下命令
meson build-debug cd build-debug ninja
- 在整个过程中,你可能会看到一些警告,但应该没有错误(如果你在任何阶段看到,不要试图跳过它;而是记录下来并在论坛上向我们询问
- 如果你不确定,再次运行Ninja;如果它说 "no work to do",说明一切正常。
- 现在,从提示符中运行TPT应该是可行的
./powder
接下来的步骤(所有平台)
更新二进制文件
现在你已经成功地第一次构建了TPT,你可能会想改变代码中的一些东西。要更新二进制文件,请通过执行以下命令再次构建它
ninja
在你上次执行的相同提示下再次构建。每当你改变一些东西,并希望二进制文件反映这些改变时,你都必须这样做。
构建release版
到目前为止,你一直在构建 "调试 "二进制文件。这些二进制文件比 "发布 "版本的调试要容易得多,但它们的性能也较差。你可以建立一个 "release"版本二进制文件,它的性能要好得多,但很难调试。只有当你确定你没有更多的bug需要处理时才使用这些构建。如果以后确实出现了一个bug,再去构建debug二进制文件。
要构建release版二进制文件,请在提示符中导航回到版本库的根目录,用Meson创建一个新的构建站点,然后再次用Ninja构建
cd /d [你存放软件库的地方] cd The-Powder-Toy meson -Dbuildtype=release build-release cd build-release ninja
注意,build-debug和build-release目录是独立的 "构建项目",当你把它们设置为你的当前目录时(通过使用cd
,见上面的命令列表),你可以用Ninja更新它们。
构建static版
上面的debug和release配置都会产生 "动态 "二进制文件,这意味着它们依赖于你系统的某些组件(你用apt在linux上安装的库或用brew在macos上安装的库)或powder.exe以外的文件(在windows上与powder.exe在同一目录的DLLs)。如果你是一个MOD作者,请确保你不发送这样的二进制文件,因为你的用户已经习惯了TPT不依赖任何东西,因此不太可能有自己安装这些库的经验。
你可以通过建立一个 "static"(静态)二进制文件来摆脱这些依赖性。这样,二进制文件将依赖于你系统中很可能存在的非常基本的组件。它也会增加几兆字节,并且链接它需要更长的时间,这就是为什么你只有在即将向公众发布时才会这样做。
要构建静态二进制文件,请在提示符中导航到版本库的根目录,用Meson创建一个新的构建站点(见下面的注释!),然后再次用Ninja构建
meson -Dbuildtype=release -Dstatic=prebuilt build-release-static cd build-release-static ninja
注意:在Windows上,你还需要在上面的Meson调用中添加-Db_vscrt=static_from_buildtype
选项,否则生成的二进制文件将与MSVC运行时(vcruntime.dll和类似的)动态链接。
meson -Dbuildtype=release -Dstatic=prebuilt -Db_vscrt=static_from_buildtype build-release-static cd build-release-static ninja
曾经有用的方法
每个平台都有自己的一套怪癖,需要加以解决(主要是看你,微软和苹果)。幸运的是,我们的构建系统已经解决了其中的大部分问题。不幸的是,这些解决方法是以升级构建系统的形式出现的,而这些系统并不是自动安装的,即使是自动安装,受影响的构建站点也可能需要手动重新配置。如果你曾在某个时候让TPT成功构建,但从那时起,你的构建站点不知怎么就坏了,你可以尝试以下方法来修复它们。
修复单个构建站点的最直接的方法是重新配置它。要检查这个方法是否有效,请尝试运行Ninja。
cd /d [你存放软件库的地方] cd The-Powder-Toy meson --reconfigure --wipe build-debug # 或者你给你的构建站点起的任何名字 ninja
你必须对每一个被破坏的构建站点进行这样的操作。
如果这没有帮助,你可以升级pip、Meson和Ninja。就像第一次设置它们时一样,在linux和macos上添加sudo -H
,在windows上在高位命令提示符下运行这个。
python -m pip install --upgrade pip # 如果你得到 "没有名为pip的模块",试试python3 pip install --upgrade meson ninja
一旦你完成了这些,重新配置你的构建站点(见上文)。
如果这都没有帮助,那就是你从头开始的提示,就像你第一次构建TPT一样,按照指南进行,只不过你已经有了版本库,所以你不需要再克隆了。事实上,这是你对TPT所做修改的地方,所以你不应该删除它。'删除你的本地克隆版本库永远不会解决任何问题,它只会导致代码的丢失。甚至不要考虑这样做。
作为最后的手段,你可以在论坛上问我们 。
构建选项
构建选项在你建立一个构建站点时被传递给Meson(见上面的例子),或者在以后的任何时候,当这个构建站点已经被使用时被传递。在这两种情况下,它们都是以-D[name]=[value]
的形式作为命令行参数传递。例如,要建立一个用Lua 5.1而不是LuaJIT编译TPT的构建站点,你可以发出以下命令
meson -Dlua=lua5.1 build-debug-lua5.1
但你也可以使用一个现有的构建站点,并改变相关的构建选项来做同样的事情
cd build-debug meson configure -Dlua=lua5.1
下次你运行Ninja时,由于这个改变而需要重建的东西都会被重建。关于配置构建站点的更多信息,请参见the Meson quick guide。
下面是我们的Meson设置支持的构建选项列表
Name | Type | Description |
---|---|---|
static | one of 'none', 'system', 'prebuilt' | Build statically using libraries present on the system ('system') or using prebuilt libraries official builds use ('prebuilt') |
beta | boolean | Beta build |
ignore_updates | boolean | Don't show notifications about available updates |
install_check | boolean | Do install check on startup |
http | boolean | Enable HTTP via libcurl |
gravfft | boolean | Enable FFT gravity via libfftw3 |
snapshot | boolean | Snapshot build |
snapshot_id | integer | Snapshot ID, only relevant if 'snapshot' is true |
mod_id | integer | Mod ID, used on the Starcatcher build server; the build server will compile for all platforms for you and send updates in-game, see jacob1 to get a mod ID |
lua | one of 'none', 'lua5.1', 'lua5.2', 'luajit' | Lua library to use |
ssl | currently only 'openssl' | SSL library to use |
x86_sse | one of 'none', 'sse', 'sse2', 'sse3', 'auto' | Enable SSE (available only on x86) |
native | boolean | Build with optimizations specific to the local machine, may not run on other machines, overrides 'x86_sse' |
ogli | boolean | Enable OpenGL interface rendering (currently defunct) |
oglr | boolean | Enable OpenGL particle rendering (currently defunct) |
build_powder | boolean | Build the game |
build_render | boolean | Build the thumbnail renderer |
build_font | boolean | Build the font editor |
server | string | Simulation server |
static_server | string | Static simulation server |
update_server | string | Update server, only used by snapshots and mods, see 'snapshot_id' and 'mod_id' |
workaround_gcc_no_pie | boolean | Pass -no-pie to gcc manually to work around meson's -Db_pie=false doing nothing |