游戏开发【免费下载链接】OpenTTDOpenTTD is an open source simulation game based upon Transport Tycoon Deluxe项目地址https://gitcode.com/gh_mirrors/op/OpenTTD点击查看免费下载OpenTTD基于 Transport Tycoon Deluxe 的开源运输模拟游戏的编译体系以 CMake 为核心Windows 平台通过 Visual Studio vcpkg 管理依赖其他平台则直接使用系统库。本文基于仓库中的 COMPILING.md 完整继承其编译步骤与参数说明并结合 CMakeLists.txt、cmake/Options.cmake、vcpkg.json 等构建脚本逐一印证底层实现帮助你在任意平台上独立完成 OpenTTD 的构建、定制无 GUI 服务端版本以及为调试 desync 等疑难问题配置专用编译开关。依赖库必需、建议与可选三级分类OpenTTD 对第三方库采取“全部可选、缺失时降级功能”的策略。官方文档将依赖分为两类列表含义如下通用依赖所有平台库级别用途breakpad建议安装程序崩溃时生成 minidump 转储zlib建议安装解压缩旧版0.3.0–1.0.5存档、内容下载、高度图liblzma建议安装解压缩 1.1.0 及之后的存档libpng建议安装截图与高度图加载liblzo2可选解压缩 0.3.0 之前更古老的存档Linux 平台额外依赖库级别用途libcurl建议安装内容下载Windows 用 WinHttpEmscripten 用 JavaScript 实现 HTTPlibSDL2必需级硬件访问视频、声音、鼠标libfreetype必需级加载与渲染通用字体libfontconfig必需级字体查找与字体名解析harfbuzz必需级右起文字脚本阿拉伯文、波斯文等依赖 libiculibicu必需级右起文字脚本与字符串自然排序如果你只编译 dedicated server专用服务端文档指出最后四项字体/脚本相关库可以不需要。这一点在构建脚本中得到印证CMakeLists.txt 中所有 GUI 相关库的find_package调用都被包裹在if(NOT OPTION_DEDICATED)分支内专用服务端构建会完全跳过 SDL2、Freetype、Harfbuzz、ICU 等探测反过来在 CMakeLists.txt 中非 macOS 的 UNIX 平台若既未找到 SDL2 也未找到 Allegro会直接FATAL_ERROR终止配置HarfBuzz/ICU 缺失则只发出“无法正确渲染右起文字”的警告而非报错。文档还强调了一个关键事实OpenTTD 不强制要求任何上述库存在但缺少 liblzma 将无法打开 1.1.0 之后的绝大多数存档缺少 zlib 则无法打开多数旧存档且内容下载系统不可用。构建脚本通过link_package(... ENCOURAGED)机制见 CMakeLists.txt 中 PNG、ZLIB、LibLZMA 的ENCOURAGED标记而 LZO 不带该标记把“建议/可选”这一语义直接编码进了链接逻辑。仓库根目录的 vcpkg.json 则是用 vcpkg 构建时的依赖清单跨平台依赖 breakpad、liblzma、libpng、lzo、zlib、opusfile、soxrLinux 平台另加 curl、fontconfig、freetype、harfbuzz、icu、sdl2、dbus。Windows 平台构建工具链准备Windows 构建需要 Microsoft Visual Studio 2022 或更新版本Community 免费版即可并需要 Platform SDK——可在安装 Visual Studio 时勾选Visual C MFC for x86 and x64视版本可能还需Visual C ATL for x86 and x64一并安装否则需单独安装 Windows SDK。使用 vcpkg 安装依赖OpenTTD 在 Windows 上的依赖通过 vcpkg 工具管理。按 vcpkg 官方 Quick Start 安装工具后建议安装**静态static**版本的依赖文档列出的清单为breakpadliblzmalibpnglzozlib同时安装 x6464 位与 x8632 位两种变体实际只需其一的命令.\vcpkg install --tripletx64-windows-static .\vcpkg install --tripletx86-windows-static这里选 static triplet 并非仅仅为了省事CMakeLists.txt 中有配套逻辑——当VCPKG_TARGET_TRIPLET以-static结尾且不包含-md时主程序与测试目标的 C 运行库会被自动切换为多线程静态版/MTDebug 下为/MTd若使用-static-md结尾的 triplet则保持动态运行库/MD。生成工程文件并编译两种可行方式直接在 IDE 中打开源码目录作为 CMake 项目CMake 会被自动检测可直接编译。若依赖已安装但未被找到需要在 CMake 参数中设置VCPKG_TARGET_TRIPLETVisual Studio 2022 还需设置CMAKE_TOOLCHAIN_FILEMSVC 工程文件的命令行示例给出了典型取值。通过 CMake 生成 MSVC 工程文件需要下载 CMake 或使用 vcpkg 自带版本mkdir build cd build cmake.exe .. -GVisual Studio 17 2022 -DCMAKE_TOOLCHAIN_FILElocation of vcpkg\vcpkg\scripts\buildsystems\vcpkg.cmake -DVCPKG_TARGET_TRIPLETx64-windows-static将location of vcpkg替换为 vcpkg 的安装位置。执行后 build 目录中生成 MSVC 工程文件MSVC 还可以通过工程中的ZERO_CHECK项目自行重建rebuild这些文件。其他平台Linux / macOS 等CMake make除 Windows 外的平台统一走 CMake 流程。文档给出的最低 CMake 要求是 3.16需要注意当前仓库顶层 CMakeLists.txt 实际声明cmake_minimum_required(VERSION 3.17)且配置阶段禁止在源码目录内直接构建CMakeLists.txt 会对 in-source build 直接报FATAL_ERROR因此务必使用独立的 build 目录。默认构建为Debug 且启用断言CMakeLists.txt 中未指定CMAKE_BUILD_TYPE时显式设为Debug文档提醒这比 Release 构建慢得多。标准流程mkdir build cd build cmake .. make关于如何切换为 Release 构建、使用哪些 CMake 交互参数文档建议直接阅读 CMake 官方手册的 user interaction 章节此处不展开。CMake 选项四种构建形态通过 CMake 参数可以影响构建形态文档列出四个常用选项选项效果源码级说明-DCMAKE_BUILD_TYPERelWithDebInfo构建 Release 版本。比 Debug 快得多但崩溃时的调试信息少很多非 Debug 配置下 cmake/CompileFlags.cmake 会自动追加-D_FORTIFY_SOURCE2-DOPTION_DEDICATEDON构建无 GUI 的 OpenTTD适合无头服务器所需库更少cmake/Options.cmake 中追加-DDEDICATED宏CMakeLists.txt 据此跳过全部 GUI 依赖探测-DOPTION_USE_ASSERTSOFF关闭断言。需谨慎使用因为 assert 能捕捉问题的早期征兆Release 构建默认关闭cmake/Options.cmake开启时定义WITH_ASSERT关闭时定义NDEBUG-DOPTION_TOOLS_ONLYON只构建strgen等工具不构建游戏本体适合交叉编译CMakeLists.txt 中该选项会提前return()只加入src子目录的工具目标除上述四个文档重点介绍的选项外cmake/Options.cmake 中还定义了若干构建期可配置的开关配置完成后会由show_options()打印当前取值例如OPTION_PACKAGE_DEPENDENCIES把依赖库拷贝进lib/便于打包仅 Linux 可用OPTION_INSTALL_FHS按 FHS 目录结构安装Linux 默认开启OPTION_FORCE_COLORED_OUTPUT强制 ANSI 彩色编译输出GNU/Clang 专用配合 cmake/CompileFlags.cmakePERSONAL_DIR/SHARED_DIR/GLOBAL_DIR个人/共享/全局数据目录在 CMakeLists.txt 中若设置了前两项会编译进WITH_PERSONAL_DIR/WITH_SHARED_DIR宏各平台默认值见 cmake/Options.cmake如 Linux 个人目录默认~/.openttdmacOS 默认Documents/OpenTTD。支持的编译器文档给出的原则是任何受 CMake 支持且支持 C20 的编译器都应能编译 OpenTTD具体编译器清单随时间变化需查阅编译器手册确认 C20 支持、查阅 CMake 确认对编译器的支持。仓库侧的硬性约束在 CMakeLists.txtCMAKE_CXX_STANDARD 20且CMAKE_CXX_STANDARD_REQUIRED YES、关闭 C 扩展CMAKE_CXX_EXTENSIONS NO。另外从 cmake/CompileFlags.cmake 的源码结构看项目目前只为 MSVC、GNU、Clang、AppleClang 四类编译器定义了警告选项MSVC 使用/W3等GCC/Clang 使用-Wall -Wextra -Wformat2等一组严格警告遇到未适配的编译器会在配置阶段直接报FATAL_ERROR并提示提交 PR 增加支持——这解释了文档为何把“CMake 是否支持你的编译器”作为前提条件之一。基础集Base Set编译避免污染源码树要重新编译使用原版 Transport Tycoon Deluxe 图形所需的附加图形还需要安装 GRFCodec内含 NFORenum工具。文档特别警告了两个副作用GRF 重新生成检测到 GRFCodec 后构建过程会重新生成.grf文件并写回源码目录使仓库处于被修改状态不同版本的 GRFCodec 可能产生二进制差异翻译缺口若基础集新增的翻译尚未纳入基础集的信息文件重新生成也会带来差异。探测逻辑在 cmake/FindGrfcodec.cmake依次find_program查找grfcodec、grfid、nforenum三者齐全才认为Grfcodec可用。文档给出的规避方法是在 CMake 缓存中显式禁用这两个变量# 在 build 目录执行或在 cmake 命令中传入 cmake .. -DGRFCODEC_EXECUTABLEGRFCODEC_EXECUTABLE-NOTFOUND -DNFORENUM_EXECUTABLENFORENUM_EXECUTABLE-NOTFOUND即把GRFCODEC_EXECUTABLE和NFORENUM_EXECUTABLE设为 CMake 的“未找到”值构建将跳过基础集重新生成保持源码树干净。开发者调试编译开关CXXFLAGSCOMPILING.md 列出的最后一组技巧是通过CXXFLAGS直接控制编译标志任意组合均可标志作用-DRANDOM_DEBUG辅助调试 desync不同玩家随机数发散问题-fno-inline禁止生成内联函数显著降低调试难度-O0关闭全部优化显著降低调试难度-p开启性能剖析profiling其中-DRANDOM_DEBUG的作用范围可以从源码直接确认它在 src/core/random_func.cpp 中拦截核心随机数生成、在 src/debug.cpp 中影响调试输出、并在 src/network/network_internal.h 中为网络相关随机量打标记——与仓库中 desync 调试文档docs/desync.md、docs/debugging_desyncs.md所描述的排查流程相衔接。文档同时强调一条容易踩坑的规则修改CXXFLAGS时必须使用全新的 build 目录因为该值会被 CMake 缓存。示例用法CXXFLAGS-fno-inline cmake ..小结一次可复现的完整构建综合以上各节一个典型的 Linux 开发环境构建Release、保留断言以便抓崩溃、跳过基础集重生成可以写成mkdir build cd build cmake .. -DCMAKE_BUILD_TYPERelWithDebInfo \ -DGRFCODEC_EXECUTABLEGRFCODEC_EXECUTABLE-NOTFOUND \ -DNFORENUM_EXECUTABLENFORENUM_EXECUTABLE-NOTFOUND make构建完成后除openttd主程序外还会生成openttd_test测试目标CMakeLists.txt测试通过 CTest/Catch2 发现并注册CMakeLists.txt可用ctest在 build 目录内运行以验证构建结果。整套流程与参数细节以 COMPILING.md 为准构建行为细节以 CMakeLists.txt 与 cmake/ 目录下的脚本为准。赞分享游戏开发【免费下载链接】OpenTTDOpenTTD is an open source simulation game based upon Transport Tycoon Deluxe项目地址https://gitcode.com/gh_mirrors/op/OpenTTD点击查看免费下载相关推荐LuantiMinetest多平台编译指南CMake 构建选项全解析与 Linux/Windows/macOS 实战LuantiMinetest多平台编译指南CMake 构建选项全解析与 Linux/Windows/macOS 实战 导读 Luanti原 Minete游戏开发图形学使用 CMake 编译 Cataclysm-DDA构建流程、依赖清单与全部构建选项详解使用 CMake 编译 Cataclysm DDA构建流程、依赖清单与全部构建选项详解 Cataclysm DDACataclysm: Dark Days游戏开发Dogecoin 跨平台依赖构建系统depends实战指南从零编译多平台依赖与交叉编译配置Dogecoin 跨平台依赖构建系统depends实战指南从零编译多平台依赖与交叉编译配置 本文以 Dogecoin 仓库中的 depends 系统说明区块链上一篇CANN Ascend C SIMT bfloat16转换函数下一篇国家中小学智慧教育平台电子课本PDF批量下载离线存档教材的轻量工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考