From bd18a7a9071ab4f008a6226bd172e16265c72f17 Mon Sep 17 00:00:00 2001 From: taynpg Date: Tue, 29 Oct 2024 17:00:05 +0800 Subject: [PATCH] =?UTF-8?q?update=EF=BC=9A=E6=9B=B4=E6=96=B0=E8=BF=9B?= =?UTF-8?q?=E5=BA=A6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 25 ++++++++++++++++---- CMakeLists.txt | 2 +- cmd_parse.cpp | 55 +++++++++++++++++++++++++++++++++++++++---- main.cpp | 6 ++--- 4 files changed, 76 insertions(+), 12 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index c438283..74831d9 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -19,9 +19,9 @@ "args": [ ] }, - "cmake.configureSettings": { - "CMAKE_TOOLCHAIN_FILE": "${env:VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" - }, + // "cmake.configureSettings": { + // "CMAKE_TOOLCHAIN_FILE": "${env:VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" + // }, "cmake.options.statusBarVisibility": "visible", "cmake.generator": "Ninja", "C_Cpp.default.compileCommands": "${workspaceRoot}/build/compile_commands.json", @@ -101,6 +101,23 @@ "set": "cpp", "stop_token": "cpp", "thread": "cpp", - "xtree": "cpp" + "xtree": "cpp", + "cwctype": "cpp", + "array": "cpp", + "strstream": "cpp", + "*.tcc": "cpp", + "complex": "cpp", + "condition_variable": "cpp", + "unordered_map": "cpp", + "functional": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "random": "cpp", + "source_location": "cpp", + "string_view": "cpp", + "fstream": "cpp", + "cinttypes": "cpp", + "typeindex": "cpp", + "variant": "cpp" } } \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 0cf6df6..9f5f1a1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,7 +22,7 @@ set(SOURCES_FILE ) set(Boost_USE_STATIC_LIBS OFF) -find_package(Boost REQUIRED program_options) +find_package(Boost REQUIRED program_options filesystem) include_directories(${Boost_INCLUDE_DIR}) add_executable(PackBinary ${SOURCES_FILE}) diff --git a/cmd_parse.cpp b/cmd_parse.cpp index 11b589a..8c9be99 100644 --- a/cmd_parse.cpp +++ b/cmd_parse.cpp @@ -1,6 +1,9 @@ #include "cmd_parse.h" +#include #include +namespace fs = boost::filesystem; + CCmdParse::CCmdParse() { } @@ -9,9 +12,14 @@ bool CCmdParse::cmdParse(int argc, char* argv[]) { cmd::options_description desc("options"); desc.add_options()("help,h", "produce help message")( - "dirs,d", cmd::value>()->multitoken(), + "dirs,d", cmd::value>(), "set search dirs")("mode,m", cmd::value()->default_value(-1), - "设置执行模式,0-打包,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); @@ -25,8 +33,20 @@ bool CCmdParse::cmdParse(int argc, char* argv[]) if (vm.count("mode")) { result_.mode = vm["mode"].as(); } - if (vm.count("dir")) { - result_.lib_dirs = vm["dir"].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; @@ -34,5 +54,32 @@ bool CCmdParse::cmdParse(int argc, char* argv[]) 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; } diff --git a/main.cpp b/main.cpp index b674c58..7dcaa97 100644 --- a/main.cpp +++ b/main.cpp @@ -8,8 +8,8 @@ int main(int argc, char** argv) if (!parse.cmdParse(argc, argv)) { return 0; } - - - + if (!parse.checkArgs()) { + return 0; + } return 0; }