But why? - nosoop/NinjaBuild-SMPlugin GitHub Wiki

Why this project exists

In short, to make it easier for me, other developers, build servers, and end-users themselves to produce consistent (if not reproducible) builds.

The most common way SourceMod plugin authors compile their code is with a dedicated compiler, littered with third-party dependencies that may be outdated or break on one project but not another. This project template is designed to bundle all the third-party stuff it needs to compile, meaning you don't have to hunt down specific revisions of things yourself.

It also provides a fast way to deal with breakages on dependency updates, since it detects when outputs need to be recompiled. The largest project that uses this (as far as I know, since I own it) contains dozens of separate plugins, each depending on various combinations of third-party projects. If some dependency upgrade breaks compiles, it's easy to track down and fix without having to compile each plugin by hand. (While it could be refactored into a large monolithic plugin, functionality is separated out for rapid development simplicity.)

Using a generic build system also opens up the possibility of integrating with other software, allowing for things like declaring in-memory structures using a configuration-based style which then gets generated into repetitive SourcePawn code. That is exactly what my TFDamageInfo project is doing.

Github workflow integration is also provided for free; see the contrib/ directory.

There's a small learning curve with doing the project setup and a few pain points with the workflow that could use improvement, but overall it's suitable for general use.