MAME项目编译指南:从基础到进阶
2025-07-06 07:43:18作者:秋泉律Samson
前言
MAME(Multiple Arcade Machine Emulator)是一个开源的街机游戏模拟器项目,支持数千种经典游戏系统的模拟。本文将详细介绍如何在不同平台上编译MAME源代码,帮助开发者构建自己的MAME版本。
基础编译要求
编译器要求
编译MAME需要满足以下基本条件:
- C++17兼容编译器:支持GCC 10.3+或Clang 11+版本
- 标准库:GNU libstdc++ 10.3+或libc++ 11+
- 注意事项:
- 避免使用GCC主要版本的初始发布版(如GCC 12.0)
- 建议使用稳定的小版本(如GCC 12.1+)
编译参数说明
参数 | 作用 | 示例 |
---|---|---|
REGENIE=1 | 强制重新生成项目文件 | make REGENIE=1 |
TOOLS=1 | 包含额外工具(如chdman) | make TOOLS=1 |
SYMBOLS=1 | 包含调试符号(增加体积) | make SYMBOLS=1 |
-jN | 并行编译(N=核心数+1) | make -j5 |
子系统编译技巧
MAME支持仅编译特定系统的模拟器,这可以显著减少编译时间和输出体积:
# 仅编译Pac-Man相关系统
make SUBTARGET=pacem SOURCES=src/mame/pacman REGENIE=1 -j4
# 仅编译Apple II系列
make SUBTARGET=appulator SOURCES=apple/apple2.cpp,apple/apple2e.cpp REGENIE=1 -j4
注意:修改SOURCES后若遇到链接错误,需删除build目录下对应的静态库文件。
Windows平台编译指南
MSYS2环境准备
-
推荐配置:
- Windows 7+系统(64位推荐)
- 最新版MSYS2环境
-
可选组件:
- SDL2接口:添加
OSD=sdl
参数 - Qt调试器:添加
USE_QTDEBUG=1
参数
- SDL2接口:添加
标准MSYS2安装步骤
-
安装基础工具:
pacman -Syu pacman -S curl git make
-
按架构安装工具链:
# x86_64 pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-python pacman -S mingw-w64-x86_64-llvm mingw-w64-x86_64-libc++ mingw-w64-x86_64-lld # i686 pacman -S mingw-w64-i686-gcc mingw-w64-i686-python pacman -S mingw-w64-i686-llvm mingw-w64-i686-libc++ mingw-w64-i686-lld
Visual Studio编译
-
生成VS2022项目:
make vs2022
-
项目文件位置:
build/projects/windows/mame/vs2022
注意:MSYS2环境仍是必需的,用于生成项目文件和资源处理。
Linux平台编译
Fedora
安装依赖:
sudo dnf install gcc gcc-c++ SDL2-devel SDL2_ttf-devel libXi-devel
Ubuntu/Debian
安装依赖:
sudo apt-get install git build-essential python3 libsdl2-dev libsdl2-ttf-dev
Arch Linux
安装依赖:
sudo pacman -S base-devel git sdl2_ttf python
macOS平台编译
准备工作
- 系统要求:macOS 11.0 Big Sur+
- 必需组件:
- Xcode(App Store或开发者网站)
- SDL2 2.0.14+
- Python 3
安装步骤
-
安装Xcode命令行工具:
xcode-select --install
-
安装SDL2框架到系统目录
编译优化建议
- 并行编译:使用
-jN
参数(N=CPU核心数+1) - 调试版本:仅开发时使用
SYMBOLS=1
- 体积控制:通过SOURCES参数限制编译范围
- 工具链选择:LLVM工具链通常比GNU更快
常见问题
- 项目文件更新:修改编译参数后必须使用
REGENIE=1
或touch Makefile - Windows符号限制:完整调试版本可能超过PE格式限制
- 32位构建:需特别注意内存限制
通过本指南,开发者应能成功在各种平台上编译MAME项目,并根据需求定制自己的构建版本。