# 发行版编译指南

目前已知支持编译Windows、Linux、Macos系统。

我们提供了三种编译方法：使用Makefile或CMake或XMake。

> CMakeList由[copi143](https://github.com/copi143)提供，谢谢！

## 使用XMake编译

### 需要准备的环境

在编译前，请确保你有：

- **XMake** 用于构建程序 **工具参考版本：xmake v2.9.6**
- **C++编译器** 一个合适的本地编译器 **工具参考版本：g++ 13.1.0**

### 开始编译

执行以下命令进行构建：

``xmake``

使用``xmake run ...``即可运行程序。

> 注：请在运行前确保``src/bin-include``中的文件，被复制到可执行文件所在目录的``include``目录中。

## 使用CMake编译

> 注：本项目提供的CMake一般用于Github Action，因此灵活性较差，不建议日常使用

### 需要准备的环境

在编译前，请确保你有：

- **CMake** 用于生成构建脚本 **工具参考版本：CMake 3.29.5**
- **Make** 或 **Ninja** 用于执行构建脚本 **工具参考版本：GNU Make 3.82.90 或 Ninja 1.12.1**
- **C++编译器** `gcc` `clang` `msvc` 三选一 **工具参考版本：g++ 13.1.0**
- **strip** 用于剥削调试信息，减小可执行文件体积 **工具参考版本：GNU strip (GNU Binutils) 2.39**

如果你未安装strip，cmake可能会报错，属正常现象，发行版仍然会编译成功。**如果你希望发行版尽可能小，我们还是建议你安装strip。**

### 开始编译

依次执行以下命令

```sh
git clone https://github.com/CLimber-Rong/stamon.git
cd stamon && mkdir build && cd build
cmake ..
make
```

如果使用的是 **Ninja** 则最后一步替换为

```sh
ninja
```

## 使用Makefile编译

### 需要准备的环境

在编译前，请确保你有：

* **[必要]** make：用于执行Makefile，**工具参考版本：GNU Make 3.82.90**
* **[必要]** C++编译器：用于编译整个项目，默认为G++编译器，如需更换编译器请更改Makefile中的``COMPILER``宏，**工具参考版本：g++ 13.1.0**
* **[非必要]** strip：用于剥削调试信息，减小可执行文件体积，**工具参考版本：GNU strip (GNU Binutils) 2.39**
* **[非必要]** upx：用于压缩可执行文件体积，但是会降低程序性能，**工具参考版本：upx 4.0.2**

如果你未安装strip，执行Makefile可能会报错，属正常现象，发行版仍然会编译成功。**如果你希望发行版尽可能小，我们还是建议你安装strip。**

### 开始编译

打开终端，切换到源码目录（即与``Makefile``同级的目录），你可以根据系统来使用编译指令：

* ``make release``：（默认）编译Windows发行版，在``bin``目录下生成``stamon.exe``
* ``make release_win``：编译Windows发行版，在``bin``目录下生成``stamon.exe``
* ``make release_linux``：编译Linux发行版，在``bin``目录下生成``stamon``
* ``make release_macos``：编译MacOS发行版，在``bin``目录下生成``stamon``

你也可以根据系统来使用压缩指令：

* ``make zip_release_win``：压缩Windows发行版，该指令将会压缩``bin/stamon.exe``
* ``make zip_release_linux``：压缩Linux发行版，该指令将会压缩``bin/stamon``
* ``make zip_release_macos``：压缩MacOS发行版，该指令将会压缩``bin/stamon``