amxx模块开发入门003-使用AMBuild工具编译模块(Windows)
条评论本篇文章将介绍如何使用AMBuild工具来编译我们的module源码,生成Windows版本的*_amxx.dll模块文件。
工具环境
操作系统:windows 10 64位(可以装在VMWare等虚拟机)
编译工具:Visual Studio 2017、AMBuild编译工具
开发工具:amxmodx、metamod、hlsdk、mysql等sdk
操作系统安装和配置
操作系统我们用的是64位的win10,并且安装git for windows工具。
编译工具安装和配置
安装vs2017
安装Visual Studio 2017,是为了使用它的编译环境和cl.exe编译工具(AMBuild在windows平台下会自动检测和调用),另外,还需要使用它的x86 Native Tools Command Prompt for VS 2017,一个含有windows平台编译x86程序时,所使用的众多的环境变量(通过这个shell来执行ambuild命令,可以省去手动配置环境变量的步骤,减少出错的概率)
我们可以在“开始”菜单中的“Visual Studio 2017”中找到x86 Native Tools Command Prompt for VS 2017
或者你也可以在桌面新建一个快捷,目标指向下边的路径。
1 | %comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat" |

双击打开运行结果如下:
有提示:[vcvarsall.bat] Environment initialized for: 'x86'

cmd命令行下,切换盘符方法:输入D:,然后回车即可切换到D盘
安装mingw64
首先,我们先下载mingw64,打开网站后,我们选择MinGW-W64 GCC-8.1.0下的x86_64-win32-seh这个版本进行下载,下载后得到x86_64-8.1.0-release-win32-seh-rt_v6-rev0.7z这个压缩包,我们将它解压到D盘根目录下。
然后,我们给D:\mingw64\bin这个路径添加到环境变量path中,这样我们在cmd中直接输入gcc --version就可以看到gcc的版本信息了。

安装nasm
紧接着,我们下载nasm,选择nasm-2.15.05-win64.zip这个版本进行下载,下载完成后,我们把nasm.exe文件放到D:\mingw64\bin即可,这样ambuild就能够正确找到它了。
安装python3
我们的ambuild是使用python编写的,所以我们还需要安装python3,
选择Windows installer (64-bit)安装包下载安装即可。
安装完成后可以通过cmd命令python --version看到版本是3.11.X的版本信息。
开发工具安装和配置
首先在D创建名为sdk的文件夹,即D:\sdk。
然后在sdk文件夹中,通过git命令clone以下sdk开发包到本地。
另外,如果没有git命令,请先自行安装git工具。
1 | git clone https://github.com/wudics/ambuild.git |
接着在mysql官网下载MySQL5.5版本的win32开发包,依次选择“5.5.60”版本、“Microsoft Windows”,然后选择Windows (x86, 32-bit), ZIP Archive这个x86架构32位版本的下载。你也可以直接点击这里直接下载。

下载后得到mysql-5.5.60-win32.zip,解压出来放到D:\sdk目录下,并将目录名称修改为mysql-5.5。
此时,目录结构应该是这样的
1 | D:\sdk\ambuild |
注意,文件夹名称不能修改成其他的,否则可能ambuild时会无法识别出正确的路径
版本问题,如果版本与此时不一致的话,可能会影响兼容性,导致后续的操作无法正确完成。
ambuild此时版本是2.2版本(amxmodx此时使用的是2.0版本,不过无须担心,是可以兼容的)。
metamod-hl1已经很久没有更新了,无需考虑版本问题。
hlsdk也是很久没有更新了,也不用担心版本问题。
amxmodx此时的版本是1.8.x,它里边还有个子项目amtl,位于amxmodx/public/amtl。
如果编译时因为amtl版本问题导致出错的话,可以在我的fork仓库中找到此时版本的amtl替换即可。
地址是https://github.com/wudics/amtl。
初始化编译
初始化编译,意思是我们需要先对amxmodx进行编译。
成功对amxmodx进行编译之后才对我们自己开发的module进行编译。
此时,我们就需要用到x86 Native Tools Command Prompt for VS 2017这个工具了,我们以下所输入的命令都是需要通过这个工具来进行执行的,否则可能会因为找不到环境变量导致编译失败。我们这里把它简称为vshell。
1 | # 从C盘切换至D盘,进入sdk/amxmodx文件夹 |
此时,可能会出现cc1: all warnings being treated as errors的错误提示,其实是gcc编译器加了-Werror参数导致的,意思就是所有的warning都会进行error报错。为了能够正常编译,一是修改源码,二是去掉-Werror参数。
我们这里为了方便,就先把-Werror去掉了。
使用编辑器打开D:\sdk\amxmodx\AMBuildScript文件,找到configure_gcc中的-Werror并把它注释起来即可,修改后如下:
1 | def configure_gcc(self, cxx): |
然后,使用vshell重新进入D:\sdk\amxmodx\build目录,执行ambuild命令重新编译。
注意,此时已经无需再执行python ../configure.py命令配置,可直接ambuild编译。
1 | cd build |
当提示Build succeeded.后,表示整个工程都编译成功了。
在D:\sdk\amxmodx\modules目录下,我们可以看到很多编译好的module模块,这是系统自带的一些有用的模块。
之后,我们编译出来的module也会在这个目录下生成。
开发自己的模块
创建模块项目
首先,我们也需要按照amxmodx的目录结构,来构建我们的module模块项目。
先进入到D:\sdk\amxmodx\modules目录下,在这里创建我们的module模块项目(我这里在github仓库提供了一个template空项目mymodule2,你可以直接用来编译,以后你也可以基于这个模板来开发自己的module模块)。
1 | # 当前目录 D:\sdk\amxmodx\modules |
修改模块名称
其中,czfun是我们模块项目的文件夹名称,接下来我们也要用czfun来命名我们的模块。
用编辑器打开D:\sdk\amxmodx\modules\czfun\AMBuilder文件,找到下面的代码:
1 | binary = AMXX.MetaModule(builder, 'mymodule2') |
把mymodule2修改成czfun,这里修改的是编译生成后的模块名称。
1 | binary = AMXX.MetaModule(builder, 'czfun') |
添加模块编译代码
这里的意思就是把我们创建的czfun模块,添加到ambuild的编译链中,是ambuild能够找到我们的模块并进行编译。
用编辑器打开D:\sdk\amxmodx\AMBuildScript文件,在最底下,找到如下内容:
1 | builder.RunBuildScripts( |
然后,在其底部添加czfun模块编译子脚本的路径:'modules/czfun/AMBuilder',
1 | builder.RunBuildScripts( |
开始编译模块
继续cd进入之前我们创建的build文件夹,执行ambuild命令即可。
1 | cd build |
提示编译成功后,我们在D:\sdk\amxmodx\build\modules\czfun目录下,就可以看到我们编译的模块了。
在Windows编译模块,通常会加上特殊的后缀,即czfun_amxx.dll,就是我们的模块文件了。
参考文献
AMBuild WiKi & Tutorial
Building AMX Mod X with AMBuild
Building Sourcemod
AMBuild 2.2 API
AMBuild 2.1 API
AMBuild 2.0 API