在C / C ++中创build一个unix / linux命令行工具的最佳做法是什么?

我目前负责为内部开发团队创build一些命令行帮助工具。 但是,我想知道创buildunix命令行工具的最佳实践。 我已经尝试查看git源代码 ,以了解如何读取参数并相应地显示消息的示例。 然而,我正在寻找一个清晰的模板来创build一个工具,安全地读取参数,并显示标准的“帮助”消息,如果用户键入一个不正确的参数或帮助我想显示帮助信息。 是否有一个标准的库阅读-abcFGH和 – --parameter和切换哪个进程基于传递的参数启动?

命令行:

 git 

要么

 git --help 

输出:

 usage: git [--version] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path] [-p|--paginate|--no-pager] [--no-replace-objects] [--bare] [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>] [-c name=value] [--help] <command> [<args>] ... 

命令行:

 MyTool CommandName --CommandArgs 

输出:

无论具体的命令如何


我到目前为止工作的是:

码:

 int main(int argc, char **argv) { if(argc < 2) helpMessage(); char* commandParameter = argv[1]; if (strncmp(argv [1],"help", strlen(commandParameter)) == 0) helpMessage(); else if (strncmp(argv [1],"pull", strlen(commandParameter)) == 0) pull(); else helpMessage(); } 

什么是理想的会是这样的:

码:

 int main(int argc, char **argv) { MagicParameters magicParameters = new MagicParameters(argv); switch(magicParameters[1]) { case command1: Command1(); break; case ... case help: default: HelpMessage(); break; } } 

Solutions Collecting From Web of "在C / C ++中创build一个unix / linux命令行工具的最佳做法是什么?"

getopt_long()就是你要找的东西,下面是一个最简单的用法的例子:

  static const struct option opts[] = { {"version", no_argument, 0, 'v'}, {"help", no_argument, 0, 'h'}, {"message", required_argument, 0, 'm'}, /* And so on */ {0, 0, 0, 0 } /* Sentiel */ }; int optidx; char c; /* <option> and a ':' means it's marked as required_argument, make sure to do that. * or optional_argument if it's optional. * You can pass NULL as the last argument if it's not needed. */ while ((c = getopt_long(argc, argv, "vhm:", opts, &optidx)) != -1) { switch (c) { case 'v': print_version(); break; case 'h': help(argv[0]); break; case 'm': printf("%s\n", optarg); break; case '?': help(argv[0]); return 1; /* getopt already thrown an error */ default: if (optopt == 'c') fprintf(stderr, "Option -%c requires an argument.\n", optopt); else if (isprint(optopt)) fprintf(stderr, "Unknown option -%c.\n", optopt); else fprintf(stderr, "Unknown option character '\\x%x'.\n", optopt); return 1; } } /* Loop through other arguments ("leftovers"). */ while (optind < argc) { /* whatever */; ++optind; } 

看看getopt库。