【CPP】自己實現一個CPP小工具demo,可以擴展其他選項

自己寫CPP腳本小工具

  • 1. 思路描述
  • 2. 代碼實現
    • 2.1 代碼文件CppTool.cpp
    • 2.2 CMakeLists.txt
  • 3. 工具示例
    • 3.1 幫助信息
    • 3.2 工具用法
    • 3.3 實際使用


1. 思路描述

實現一個簡單的命令行工具。內容包括:

  1. 命令幫助信息
  2. 參數檢查,參數解析等功能。
  3. 執行其他命令。
  4. 將指令封裝成一個類,在main()中調用類的對象,執行命令。

2. 代碼實現

2.1 代碼文件CppTool.cpp

#include <iostream>
#include <string>
#include <vector>
#include <ctime>
#include <iomanip>
#include <algorithm>
#include <stdexcept>class CommandLineTool {
public:CommandLineTool(int argc, char* argv[]) {parseArguments(argc, argv);}void execute() {if (showHelp) {displayHelp();return;}if (showVersion) {displayVersion();return;}if (showTime) {displayCurrentTime();return;}if (!commandToExecute.empty()) {executeCommand();return;}// throw std::runtime_error("No valid command specified. Use -h for help.");}private:bool showHelp = false;bool showVersion = false;bool showTime = false;std::string commandToExecute;std::string outputFile;void parseArguments(int argc, char* argv[]) {if (argc < 2) {// throw std::runtime_error("No arguments provided. Use -h for help.");displayHelp();}std::vector<std::string> args(argv + 1, argv + argc);for (auto it = args.begin(); it != args.end(); ++it) {if (*it == "-h" || *it == "--help") {showHelp = true;} else if (*it == "-v" || *it == "--version") {showVersion = true;} else if (*it == "-t" || *it == "--time") {showTime = true;} else if (*it == "-e" || *it == "--execute") {if (++it == args.end()) {throw std::runtime_error("Missing command for -e/--execute");}commandToExecute = *it;} else if (*it == "-o" || *it == "--output") {if (++it == args.end()) {throw std::runtime_error("Missing filename for -o/--output");}outputFile = *it;} else {throw std::runtime_error("Unknown argument: " + *it);}}}void displayHelp() {std::cout << "Command Line Tool v1.0\n"<< "Usage: cltool [OPTIONS]\n\n"<< "Options:\n"<< "  -h, --help\t\tShow this help message\n"<< "  -v, --version\t\tDisplay version information\n"<< "  -t, --time\t\tDisplay current date and time\n"<< "  -e, --execute CMD\tExecute specified command\n"<< "  -o, --output FILE\tSave output to specified file\n";}void displayVersion() {std::cout << "Command Line Tool Version 1.0\n";}void displayCurrentTime() {std::time_t now = std::time(nullptr);std::tm* timeinfo = std::localtime(&now);std::cout << "Current time: "<< std::put_time(timeinfo, "%Y-%m-%d %H:%M:%S")<< std::endl;}void executeCommand() {std::cout << "Executing command: " << commandToExecute << "\n";// 實際執行命令的代碼system(commandToExecute.c_str());// 示例輸出std::cout << "Command executed successfully\n";if (!outputFile.empty()) {std::cout << "Output saved to: " << outputFile << "\n";// 實際保存到文件的代碼}}
};int main(int argc, char* argv[]) {try {CommandLineTool tool(argc, argv);tool.execute();} catch (const std::exception& e) {std::cerr << "Error: " << e.what() << std::endl;return 1;}return 0;
}

2.2 CMakeLists.txt

cmake_minimum_required(VERSION 3.15)
project(CppTool)set(CMAKE_CXX_STANDARD 11)add_executable(CppTool CppTool.cpp)
  1. 此處默認讀者會使用Cmake編譯Cpp文件,如未安裝Cmake工具,請參考網上其他教程安裝Cmake工具,并添加環境變量。

  2. 編譯命令如下:

  • 在CMakeLists.txt文件所在目錄,新建下級目錄build,用于存放臨時文件及編譯產物。依次按步驟執行下列命令:
mkdir build
cd build
cmake ..
make

3. 工具示例

3.1 幫助信息

Command Line Tool v1.0
Usage: cltool [OPTIONS]Options:-h, --help            Show this help message-v, --version         Display version information-t, --time            Display current date and time-e, --execute CMD     Execute specified command-o, --output FILE     Save output to specified file

3.2 工具用法

# 顯示幫助
./CppTool -h# 顯示版本
./CppTool --version# 顯示當前時間
./CppTool -t# 執行命令
./CppTool -e "ls -l"# 保存輸出到文件
./CppTool -t -o time.txt

3.3 實際使用

C:\Users\xxx\CLionProjects\hello0614\cmake-build-debug>CppTool.exe
Error: No arguments provided. Use -h for help.C:\Users\xxx\CLionProjects\hello0614\cmake-build-debug>CppTool.exe --help
Command Line Tool v1.0
Usage: cltool [OPTIONS]Options:-h, --help            Show this help message-v, --version         Display version information-t, --time            Display current date and time-e, --execute CMD     Execute specified command-i, --ipinfo          Display network IP information-o, --output FILE     Save output to specified fileC:\Users\xxx\CLionProjects\hello0614\cmake-build-debug>CppTool.exe -t
Current time: 2025-08-16 19:45:09C:\Users\xxx\CLionProjects\hello0614\cmake-build-debug>CppTool.exe -e "ipconfig"
Executing command: ipconfigWindows IP 配置以太網適配器 以太網 2:媒體狀態  . . . . . . . . . . . . : 媒體已斷開連接連接特定的 DNS 后綴 . . . . . . . :以太網適配器 以太網 3:連接特定的 DNS 后綴 . . . . . . . :本地鏈接 IPv6 地址. . . . . . . . : fe80::c863:71e5:c8fd:a135%12IPv4 地址 . . . . . . . . . . . . : 192.168.112.98子網掩碼  . . . . . . . . . . . . : 255.255.254.0默認網關. . . . . . . . . . . . . : 192.168.112.1無線局域網適配器 WLAN:媒體狀態  . . . . . . . . . . . . : 媒體已斷開連接連接特定的 DNS 后綴 . . . . . . . :無線局域網適配器 本地連接* 3:媒體狀態  . . . . . . . . . . . . : 媒體已斷開連接連接特定的 DNS 后綴 . . . . . . . :無線局域網適配器 本地連接* 12:媒體狀態  . . . . . . . . . . . . : 媒體已斷開連接連接特定的 DNS 后綴 . . . . . . . :以太網適配器 藍牙網絡連接:媒體狀態  . . . . . . . . . . . . : 媒體已斷開連接連接特定的 DNS 后綴 . . . . . . . :
Command executed successfullyC:\Users\xxx\CLionProjects\hello0614\cmake-build-debug>
C:\Users\xxx\CLionProjects\hello0614\cmake-build-debug>CppTool.exe -e "date /T"
Executing command: date /T
2025/08/16 周六
Command executed successfullyC:\Users\xxx\CLionProjects\hello0614\cmake-build-debug>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93543.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93543.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93543.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何使用嵌入模型創建本地知識庫Demo

為data目錄下的txt文檔用阿里百煉的文本嵌入模型創建一個本地知識庫import os from llama_index.core import ,Settings, SimpleDirectoryReader, VectorStoreIndex from llama_index.core.node_parser import SentenceSplitter from llama_index.llms.dashscope import DashSc…

SpringBoot 整合 Langchain4j:系統提示詞與用戶提示詞實戰詳解

> 掌握提示詞工程的核心技巧,讓你的AI應用效果提升300%! **真實痛點**:為什么同樣的模型,別人的應用精準專業,而你的卻答非所問?關鍵在于提示詞工程!本文將揭秘如何通過系統提示詞與用戶提示詞的巧妙配合,打造專業級AI應用。 --- ### 一、Langchain4j 核心概念…

Sklearn 機器學習 郵件文本分類 加載郵件數據

??親愛的技術愛好者們,熱烈歡迎來到 Kant2048 的博客!我是 Thomas Kant,很開心能在CSDN上與你們相遇~?? 本博客的精華專欄: 【自動化測試】 【測試經驗】 【人工智能】 【Python】 Sklearn 機器學習 郵件文本分類 - 加載郵件數據 在自然語言處理(NLP)中,郵件文本分…

騰訊云開發小程序工具箱使用心得

一、核心優勢與使用體驗 作為首批使用騰訊云開發&#xff08;CloudBase&#xff09;工具箱的開發者&#xff0c;我深刻感受到其通過CloudBase AI與MCP服務重構開發范式的創新價值。結合微信小程序開發場景&#xff0c;該平臺在以下維度表現突出&#xff1a; 1. AI驅動的全棧開發…

機械加工元件——工業精密制造的璀璨明珠

在工業制造的宏大畫卷中&#xff0c;機械加工元件猶如璀璨的明珠&#xff0c;以其卓越的性能和精湛的工藝&#xff0c;為各行各業的發展注入了源源不斷的動力。它們雖形態各異&#xff0c;功能不同&#xff0c;卻在無數產品中攜手合作&#xff0c;展現出科技與柔性的完美融合。…

【八股】Redis-中小廠精要八股

Redis 基礎 redis為什么這么快 (高) [!NOTE] 最首要的是Redis是純內存操作, 比磁盤要快3個數量級同時在與內存操作中采用了非阻塞I/O多路復用機制來提高并發量并且基于Redis的IO密集型&#xff0c;采用單線程操作, 免去了線程切換開銷Redis 內置了多種優化過后的數據結構實現…

C++字符串(string)操作解析:從基礎到進階

1. 字符串基礎&#xff1a;大小與容量cppvoid test1() {string s1("Hello World");cout << "size : " << s1.size() << endl; // 輸出字符串長度cout << "capacity " << s1.capacity() << endl; // 輸出字…

蘑兔音樂:音樂創作的魔法棒

在這個充滿創意與可能的時代&#xff0c;人人都有一顆渴望表達音樂之心。但傳統音樂創作&#xff0c;復雜的樂理、昂貴的設備&#xff0c;總讓人望而卻步。別擔心&#xff01;蘑兔 AI 音樂強勢來襲&#xff0c;它就是那個能讓音樂小白也能搞創作的神奇工具&#xff01;?靈感模…

從傳統到智能:RFID 技術如何重構壓縮機生產線

從傳統到智能&#xff1a;RFID 技術如何重構壓縮機生產線在工業 4.0 與中國制造 2025 戰略的深入推進下&#xff0c;作為空調核心部件的壓縮機制造業正加速從傳統生產模式向智能化轉型。壓縮機生產以高精度、大批量為顯著特點&#xff0c;長期面臨生產數據斷層、柔性化不足、質…

HTML5二十四節氣網站源碼

一. 二十四節氣文化主題網站概述 本網站以中國傳統文化瑰寶“二十四節氣”為核心&#xff0c;通過現代Web技術打造沉浸式文化體驗平臺&#xff0c;融合視覺美學與交互創新&#xff0c;全方位展現節氣的自然規律與人文內涵。網站采用響應式布局設計&#xff0c;適配多終端設備&…

微服務架構實戰指南:從單體應用到云原生的蛻變之路

&#x1f31f; Hello&#xff0c;我是蔣星熠Jaxonic&#xff01; &#x1f308; 在浩瀚無垠的技術宇宙中&#xff0c;我是一名執著的星際旅人&#xff0c;用代碼繪制探索的軌跡。 &#x1f680; 每一個算法都是我點燃的推進器&#xff0c;每一行代碼都是我航行的星圖。 &#x…

超越Transformer:大模型架構創新的深度探索

引言&#xff1a; 以GPT、Claude、Gemini等為代表的大語言模型&#xff08;LLMs&#xff09;已成為人工智能領域的核心驅動力。它們基于Transformer架構構建&#xff0c;在理解和生成人類語言方面展現出驚人的能力。然而&#xff0c;隨著模型規模指數級增長和對更長上下文、更高…

完整設計 之 智能合約系統:主題約定、代理協議和智能合約 (臨時命名)--騰訊元寶答問

本文要點和任務整體設計&#xff08;符號學 &#xff1a;為了詮釋學實踐運用 形。而上理論&#xff0c;將自己作為 兩者結合的 條帶 &#xff09;&#xff0c;包括三部分&#xff1a;內核&#xff08;設置-組態-主動把握的操作&#xff09;是認知學&#xff08;語義&#xff09…

同創物流學習記錄2·電車光電

燈在閃爍&#xff0c;照到你前面的東西了&#xff0c;它可以照前面&#xff0c;可以照6米遠。你那個電車前面五六米感應到東西了&#xff0c;它就會減速&#xff0c;然后到3米的樣子&#xff0c;它會再減速。然后再到1米2的樣子&#xff0c;它就會停下來。電車前側光電這個區域…

linux I2C核心、總線與設備驅動

一、 linux I2C體系結構linux的I2C體系結構分為3個組成部分1&#xff09;I2C核心I2C核心提供了I2C總線驅動與設備驅動的注冊、注銷方法&#xff0c;I2C通信方法&#xff08;即Algorithm&#xff09;上層的與具體適配器無關的代碼及其探測設備、檢測設備地址的上層代碼等…

跑實驗記錄

1.下載git&#xff08;base) mqmq-MS-7A59:~/桌面$ sudo apt update && sudo apt install git2.克隆項目&#xff08;base) mqmq-MS-7A59:~/桌面$ sudo apt update && sudo apt install git3.canda創建環境(base) mqmq-MS-7A59:~$ conda create -n HyTE python…

微軟動手了,聯合OpenAI + Azure 云爭奪AI服務市場

?開頭還是介紹一下群&#xff0c;如果感興趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等有問題&#xff0c;有需求都可以加群群內有各大數據庫行業大咖&#xff0c;可以解決你的問題。加群請聯系 liuaustin3 &#xff0c;&#xff08;共3300人左右 …

Reading Coach-微軟推出的免費AI閱讀教練

本文轉載自&#xff1a;Reading Coach-微軟推出的免費AI閱讀教練 - Hello123工具導航 ** 一、智能閱讀輔助工具 Reading Coach 是微軟推出的 AI 驅動閱讀訓練平臺&#xff0c;通過個性化故事生成與實時發音反饋&#xff0c;幫助學生提升閱讀流利度與詞匯量。平臺采用自適應學…

《軟件工程導論》實驗報告五 設計建模工具的使用(一)類圖

目 錄 一、實驗目的 二、實驗環境 三、學時分配 四、實驗內容與步驟 1. 百度搜索1-2張類圖&#xff0c;請重新繪制它們&#xff0c;并回答以下問題&#xff1a; 2. 根據以下描述&#xff0c;提取這個問題涉及的類&#xff0c;定義各個類之間的關系&#xff0c;并畫出類圖…

智慧景區導覽系統:基于WebGL的手繪地圖導覽設計與應用,DeepSeek大模型賦能精準游客引導服務

本文面向 景區信息化負責人、后端開發者、全棧工程師&#xff0c;旨在解決傳統景區導覽系統靜態地圖信息有限、人工導游成本高、景區服務人員咨詢壓力大 的核心痛點&#xff0c;提供從技術選型到落地部署的全鏈路解決方案。如需獲取智慧景區導覽系統解決方案請前往文章最下方獲…