openage 在 FreeBSD 上的编译安装指南:依赖清单、编译器选择与构建流程

openage 在 FreeBSD 上的编译安装指南:依赖清单、编译器选择与构建流程

【免费下载链接】openage Clone of the Age of Empires II engine 🚀 【免费下载链接】openage 项目地址: https://gitcode.com/gh_mirrors/op/openage

本篇指南面向 FreeBSD 用户,完整介绍在 FreeBSD 系统上从零编译 openage(《帝国时代 II》的开源引擎克隆实现)所需的软件包依赖、C++ 编译器选择方法以及完整的构建与运行流程。读者读完本文后,可以在 FreeBSD 上正确安装全部依赖、通过 ./configure 选择 clang 或 GCC 编译器,并完成 make、make test、make run 等全流程操作。

一、FreeBSD 编译环境概述

openage 由纯 C++ 库 libopenage 和 openage Python 包两部分构成,构建系统基于 CMake,并提供一个 autotools 风格的 ./configure 包装脚本(详见 doc/building.md 与 doc/buildsystem.md)。在 FreeBSD 上编译它需要准备好三类东西:

  1. 编译链:CMake、Python 3.9+、Cython、C++20 编译器(默认使用系统自带 clang,也可换成 pkg 里的任意版本 GCC/Clang);
  2. C++ 运行库依赖:Eigen、HarfBuzz、libpng、toml11、Qt6 等;
  3. Python 构建依赖:mako、numpy、lz4、pillow、pygments、toml、pylint 等,以及引擎配置语言 nyan。

下文以 FreeBSD 的官方包管理器 pkg 为主线,逐一给出安装命令,并结合源码说明这些依赖各自在构建中扮演的角色。

二、通过 pkg 安装全部系统依赖

FreeBSD 官方文档给出的安装命令是一次性安装所有必需软件包:

sudo pkg install cmake cython eigen3 harfbuzz opus-tools opusfile png py-mako py-numpy py-lz4 py-pillow py-pygments py-toml pylint python qt6 toml11

这条命令涵盖的软件包与 openage 构建/运行需求的对应关系如下(标签含义参考 doc/building.md 中的依赖约定:C=编译,R=运行,A=资源转换,S=静态检查,O=可选):

pkg 包名对应 openage 依赖用途
cmakecmake >= 3.16构建系统核心(CMakeLists.txt 明确要求 cmake_minimum_required(VERSION 3.16))
cythoncython >= 3.0.10将 openage/ 下的 .pyx 扩展编译为 C++(详见 buildsystem.md 的 cythonize 步骤)
eigen3eigen >= 3线性代数库,供坐标变换、矩阵运算使用
harfbuzzharfbuzz复杂文本整形,引擎通过 find_package(HarfBuzz 1.0.0 REQUIRED) 强制要求(见 libopenage/CMakeLists.txt)
opus-toolsopus / oggOpus 音频编码工具链
opusfileopusfile解码 Opus 音频流(find_package(Opusfile REQUIRED))
pnglibpng图像解码,find_package(PNG REQUIRED) 强依赖
py-makomako代码生成模板引擎,openage.codegen 用它渲染生成 C++ 源码
py-numpynumpy资源转换流程(标签 A)中的数值处理
py-lz4lz4资源转换时解压 lz4 压缩数据
py-pillowpillow (PIL)转换 SLP 等原版图像格式为 PNG
py-pygmentspygments代码高亮等工具支持
py-tomltomlPython 侧读取 TOML 配置
pylintpylint代码合规静态检查(make checkall 使用,见 doc/buildsystem.md)
pythonpython >= 3.9运行时与构建依赖(CMakeLists.txt 中 PYTHON_MIN_VERSION 定义为 3.9)
qt6qt6 >= 6.2图形界面(Core、Quick、QuickControls、Multimedia 模块),GUI 代码位于 assets/qml
toml11toml11C++ 侧 TOML 配置解析,find_package(toml11 REQUIRED) 强制要求

三、安装 nyan(引擎配置语言依赖)

FreeBSD 官方文档明确指出,除了上述 pkg 包,还必须安装 nyan 及其依赖。nyan 是 openage 的引擎配置语言,负责描述游戏对象、组件与修改包(modpack)。

nyan 的安装有两种方式(详见 doc/building.md 的 "nyan installation" 一节):

  • 开发模式(免安装):直接 clone nyan 仓库并按其构建说明编译。openage 的 CMake 会通过 CMake 用户包注册表(~/.cmake/packages/nyan/)以及系统注册表(/usr/lib/cmake/nyan/)查找 nyanConfig.cmake,因此无需 make install 即可被识别;
  • 自动下载:在配置阶段传入 ./configure --download-nyan 或 cmake -DDOWNLOAD_NYAN=YES ...,由构建系统自动获取 nyan。

若 nyan 已安装但 CMake 找不到,可手动指定其位置:

./configure -- -Dnyan_DIR=/目录/包含/nyanConfig.cmake/的路径/

其中 -- 之后的参数会原样透传给 CMake(见 configure 中 raw_cmake_args 的处理逻辑)。

四、选择 C++ 编译器:clang 与 GCC 的切换

FreeBSD 的默认编译器是基础系统中的 clang,因此开箱即可编译 openage。此外,也可以使用 pkg 仓库中任意版本的 GCC(>= 10)或其他版本的 clang:

sudo pkg install gcc

切换编译器的入口是 ./configure --help:运行后可以查看全部配置选项,其中 --compiler / -c 参数用于指定 C++ 编译器可执行文件名。从 configure 的 get_compiler() 源码可知:

  • ./configure -c clang 会被映射为 clang++,-c gcc 会被映射为 g++;
  • 支持带版本后缀的写法,例如 -c clang-18、-c gcc-13(源码中按 - 拆分后拼接 - 与版本号);
  • 若未显式指定,非 macOS 平台默认回退到 g++,FreeBSD 用户应显式指定编译器以避免歧义;
  • 环境变量 CXX 也会被读取(--compiler 的默认值来源)。

由于 ./configure 会为每一组编译器与优化参数组合创建独立的构建目录(默认位于 .bin/<编译器>-<模式>-<优化> 并通过 bin 符号链接暴露),在 clang 与 GCC 之间切换无需清空重建,只需用新的参数重新执行 ./configure 即可(详见 doc/buildsystem.md)。

五、完整构建与运行流程

依赖齐备、编译器选定后,按照以下步骤完成构建(流程与 doc/building.md 的 "Development" 一节一致):

# 1. 获取源码后,进入仓库根目录,选择编译器并生成构建目录
./configure -c clang          # FreeBSD 默认编译器;想用 GCC 则改为 -c gcc

# 2. 生成并构建所有目标(含 codegen 生成 C++、pxdgen 生成 Cython 声明、编译 libopenage 与 Cython 扩展)
make

# 3. 运行内置测试
make test

# 4. 启动游戏(等价于 bin/run;首次运行会引导完成配置)
make run

构建产物的运行入口是 bin/run,支持多种运行模式(详见 doc/running.md):

bin/run game           # 启动引擎并直接创建新游戏实例(默认模式)
bin/run test           # 运行引擎内置测试与各子系统演示
bin/run convert        # 从原版游戏安装转换资源为 openage modpack
bin/run convert-file   # 转换单个媒体文件(图形转 PNG、音频转 OPUS)
bin/run codegen        # 手动执行构建期的代码生成逻辑

若采用 Release 方式安装到系统目录,可参考 doc/building.md 的 "Release" 一节执行 ./configure --mode=release --compiler=clang --prefix=/usr/local 后 make install。官方建议优先使用发行版的 openage 软件包;对于 FreeBSD 而言,若本地没有现成包,则直接在 git 仓库内运行即可,无需 make install。

六、FreeBSD 平台相关的源码细节

从源码结构看,FreeBSD 在 openage 中有一系列平台相关处理,可作为编译排错时的参考依据:

这些代码分支说明 FreeBSD 是 openage 持续支持的一等构建平台,编译时如遇与回溯、PTY 或系统 API 相关的错误,可优先检查上述文件对应的依赖(如 execinfo)是否已正确安装。

七、常见问题排查

参考 doc/building.md 的 Troubleshooting 一节,在 FreeBSD 上构建遇到问题时可按如下思路排查:

  • 想看完整编译命令:make VERBOSE=1;

  • CMake 找不到 Qt/Python 等依赖:在构建目录运行 ccmake 或 cmake-gui 查看并修改配置变量;也可以直接向 ./configure 透传 CMake 参数,例如:

    ./configure -- -DPython3_EXECUTABLE=/usr/local/bin/python3.11
    
  • 报缺头文件:确认对应库的开发者版本(含头文件)已安装,例如 sudo pkg install eigen3(已含头文件);

  • 报 unable to execute .../clang++ 之类的 CMake 怪错:通常是直接调用 cmake 时对已初始化的构建目录重复指定编译器所致,去掉编译器定义或清理构建目录(rm -rf build bin .bin,注意从源码结构看实际构建目录为 .bin/... 的符号链接 bin)后重新配置。

八、总结

在 FreeBSD 上构建 openage 的要点可归纳为三步:先用 pkg 一次性安装 freebsd.md 中列出的全部依赖并准备好 nyan;再通过 ./configure --help 选择 clang(默认)或 GCC >= 10 作为 C++ 编译器;最后执行 ./configure、make、make test、make run 完成构建、验证与启动。借助 ./configure 的独立构建目录机制,FreeBSD 用户可以自由地在多套编译器组合之间切换,无需担心互相污染。若在安装依赖或编译过程中遇到问题,可结合本文第六节的平台源码细节与第七节的排查清单快速定位。

【免费下载链接】openage Clone of the Age of Empires II engine 🚀 【免费下载链接】openage 项目地址: https://gitcode.com/gh_mirrors/op/openage

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值