用C++创建CLI工具:从构思到成品

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

为什么C++是CLI工具的完美语言?

当谈到创建C++ CLI工具时,许多开发者会耸耸肩:"为什么?有Python、Go、Rust啊。"但让我们面对现实。如果你需要闪电般的速度、最小的内存占用和对硬件的完全控制——C++无可匹敌。系统管理员、DevOps工程师和嵌入式系统开发者至今仍在使用这种语言编写他们的控制台工具。你知道吗?这是正确的选择。

今天我们将详细讲解从零开始用C++创建CLI工具——从参数解析到二进制文件构建。你将学习如何编写一个真正的、有用的工具,可以自豪地发布到GitHub上。我们开始吧。



工具集:我们需要什么

为了舒适地工作,我们需要:

  • C++17/20编译器——GCC(Windows上的MinGW)或Clang。我个人推荐GCC 11+。
  • 文本编辑器或IDE——带有C++插件的VS Code、CLion,甚至Vim(适合硬核用户)。
  • CMake——用于方便的构建。虽然也可以使用Makefile,但CMake是现代标准。
  • Git——没有版本控制怎么行。

我们还需要一个用于解析命令行参数的库。我们不会重新发明轮子,而是使用传奇的getopt(它在POSIX系统中可用)或编写我们自己的极简解析器。第二种方案甚至更有趣——你将了解它是如何"在底层"工作的。



项目结构

在编写代码之前,让我们确定我们具体要创建什么。假设它是一个名为fileutils的工具——一个用于文件操作的控制台工具。它将能够:

  • 计算文件中的行数、单词数和字符数(类似于wc)。
  • 按模式搜索字符串(类似于最小化的grep)。
  • 显示帮助信息(--help)。

文件夹结构:

fileutils/├── src/│   ├── main.cpp│   ├── parser.cpp│   └── parser.h├── CMakeLists.txt└── README.md


步骤1:自定义参数解析器

让我们编写一个简单但可用的解析器。它将处理长标志(--lines、--words)和位置参数(文件名)。



文件 parser.h

#ifndef PARSER_H#define PARSER_H

#include <string>#include <vector>#include <map>

struct Args { bool show_lines = false; bool show_words = false; bool show_chars = false; std::string pattern; std::vector<std::string> files;};

Args parse_args(int argc, char* argv[]);

#endif


文件 parser.cpp

#include "parser.h"#include <iostream>

Args parse_args(int argc, char* argv[]) { Args args; for (int i = 1; i < argc; ++i) { std::string arg = argv[i]; if (arg == "--help" || arg == "-h") { std::cout << "用法: fileutils [选项] 文件..." << "选项:" << " --lines, -l 打印行数" << " --words, -w 打印单词数" << " --chars, -c 打印字符数" << " --search 模式 搜索模式" << " --help, -h 显示此帮助"; exit(0); } else if (arg == "--lines" || arg == "-l") { args.show_lines = true; } else if (arg == "--words" || arg == "-w") { args.show_words = true; } else if (arg == "--chars" || arg == "-c") { args.show_chars = true; } else if (arg == "--search" && i + 1 < argc) { args.pattern = argv[++i];

博客

书籍推荐