#include "cmd_parse.h" #include #include namespace fs = boost::filesystem; CCmdParse::CCmdParse() { } bool CCmdParse::cmdParse(int argc, char* argv[]) { cmd::options_description desc("options"); desc.add_options()("help,h", "produce help message")( "dirs,d", cmd::value>(), "set search dirs")("mode,m", cmd::value()->default_value(-1), "设置执行模式,0-打包,1-安装")( "purpose,p", cmd::value(), "安装目标目录")("file,f", cmd::value(), "二进制文件")( "ico,i", cmd::value(), "图标文件")( "category,c", cmd::value()->default_value("Utility"), "分类名称,例如Utility。"); cmd::variables_map vm; cmd::store(cmd::parse_command_line(argc, argv, desc), vm); cmd::notify(vm); if (vm.count("help")) { std::cout << desc; return false; } if (vm.count("mode")) { result_.mode = vm["mode"].as(); } if (vm.count("dirs")) { result_.lib_dirs = vm["dirs"].as>(); } if (vm.count("purpose")) { result_.purpose_dir = vm["purpose"].as(); } if (vm.count("file")) { result_.binary = vm["file"].as(); } if (vm.count("ico")) { result_.ico = vm["ico"].as(); } if (vm.count("category")) { result_.category = vm["category"].as(); } return true; } bool CCmdParse::checkArgs() { std::cout << "信息 ==========================================>\n"; std::cout << "binary:" << result_.binary << "\n"; std::cout << "category:" << result_.category << "\n"; std::cout << "ico:" << result_.ico << "\n"; std::cout << "mode:" << result_.mode << "\n"; std::cout << "purpose_dir:" << result_.purpose_dir << "\n"; std::cout << "dirs:" << result_.lib_dirs.size() << "\n"; for (const auto& item : result_.lib_dirs) { std::cout << ">>" << item << "\n"; } auto check_file_dir = [&](const std::string& path, bool is_file) -> bool { std::string type = is_file ? "文件:" : "文件夹:"; fs::path tp(path); if (!fs::exists(tp) || !fs::is_regular_file(tp)) { std::cout << type << path << ",不存在\n"; return false; } else { std::cout << type << path << ",检查通过!\n"; return true; } }; std::cout << "检查 ==========================================>\n"; check_file_dir(result_.binary, true); check_file_dir(result_.ico, true); return false; }