2#include "common/config.h"
7#include <simplesquirrel/simplesquirrel.hpp>
16 static std::vector<std::function<
Handler*()>> cmds = {};
24 std::string
make_usage(
const CLI::App* app, std::string
name)
const override {
25 std::string usage =
"Usage: ";
27 usage +=
" [Options] [Root Folder]";
35void Cmdline::expose(ssq::Table& table) {
36 auto cls = table.addClass(
name, Cmdline::create,
false);
43 CLI::App app{
"EVEngine - A Modern Game Engine"};
45 app.add_flag(
"-v,--version", version,
"Print version string");
46 auto formatter = std::make_shared<MyFormatter>();
48 std::vector<Handler*> handles;
52 p->setup(app, formatter);
59 }
catch (
const CLI::ParseError& e) {
60 for (
auto*
h : handles)
delete h;
61 int res = app.exit(e);
66 for (
auto*
h : handles) {
67 if (
int r =
h->parse(app, *
this); r != -1) {
72 if (version) cout << EVENGINE_VERSION << endl;
74 for (
auto*
h : handles)
delete h;
80 auto paths = sub->remaining();
81 if (paths.size() > 1) {
82 cerr << rang::fg::red <<
"Unknown remaining arguments: " << rang::fg::reset << paths[1] << endl;
85 if (paths.size() == 0) {
#define Module_IMPL(ModuleName, newExpr)
virtual std::string getName() const =0
命令行模块(eve.cmd):run / build / package / test / zip / dev-server 等子命令入口。
static std::string get_remaining(CLI::App *sub, std::string default_path=".")
子命令剩余位置参数。
static std::vector< std::function< Handler *()> > & handers()
int runArgs(unsigned argc, char **argv)
解析并执行传入的 argv。
static void registerCmd(std::function< Handler *()> handler)
One eve <subcommand> handler: CLI setup + argument parsing.