/** * @file main.cpp * @author jinchao * @brief 主函数 * @version 1.0 * @date 2025-02-14 * * @copyright Copyright (c) 2025 COMAC * */ #include #include #include #include "XNEngine.h" /** * @brief 主函数 * @param argc 参数个数 * @param argv 参数列表 * @return 返回值 */ int main(int argc, char *argv[]) { XNEngine engine; //检测输入参数个数 if (argc <= 1) { std::cerr << "A02012001: 输入参数太少! 使用 -h 查看帮助." << std::endl; return -1; } std::string configPath; std::string configId; bool hasConfigPath = false; bool hasConfigId = false; std::string arg = argv[1]; if ("-h" == arg) { std::cout << "-f\t\t指定构型配置文件路径, 不可与-id参数同时使用" << std::endl; std::cout << "-id\t\t指定构型ID, 不可与-f参数同时使用" << std::endl; std::cout << "-test\t\t\t指定测试模式" << std::endl; std::cout << "-h\t\t\t查看帮助" << std::endl; std::cout << "-v\t\t\t查看版本" << std::endl; return 0; } else if ("-v" == arg) { std::cout << "XNEngine v1.0.0" << std::endl; return 0; } //检查是否包含-f和-id参数 for (int i = 1; i < argc;) { std::string arg = argv[i]; if ("-f" == arg) { if ((i + 1) < argc) { configPath = argv[i + 1]; hasConfigPath = true; i += 2; } else { std::cerr << "A02012002: 在-f参数后, 未指定构型配置文件路径, 引擎将退出!" << std::endl; return -1; } } else if ("-id" == arg) { if ((i + 1) < argc) { configId = argv[i + 1]; hasConfigId = true; i += 2; } else { std::cerr << "A02012003: 在-id参数后, 未指定构型ID, 引擎将退出!" << std::endl; return -1; } } else if ("-test" == arg) { engine.SetTestMode(true); i++; } else { std::cerr << "A02012004: 无法识别的参数 " << arg << " , 引擎将退出!" << std::endl; return -1; } } //检查是否同时包含-f和-id参数 if (hasConfigPath && hasConfigId) { std::cerr << "A02012005: 请不要同时使用 -f 和 -id 参数, 引擎将退出!" << std::endl; return -1; } //检测配置文件格式 if (hasConfigPath) { return engine.Run(configPath, 0); } else if (hasConfigId) { return engine.Run(configId, 1); } return -1; }