在控制台应用程序中包含"帮助"消息的最佳方法是什么?

Dan*_*Dan 4 c c++ console usage-message

我正在编写一个控制台应用程序,它正在迅速获得许多命令行参数和标志.出于这个原因,我希望用户能够访问这些标志的描述以及它们的服务目的.

我能想到几种可能的解决方案

  • 我可以写一个README文件,只是把它放在与可执行文件相同的目录中.优点是它简单易用,但缺点是有人可以轻松删除/编辑文件.
  • 我可以将整个消息粘贴到我的程序中的变量中,并在用户输入mycmd --help或类似的东西时将其打印到屏幕上.优点,保持可执行和不可编辑,缺点是代码,因为我会有类似下面的东西漂浮.

    const char[] helpmsg = "Line1\n"
                           "Line2\n"
                           "...\n"
                           "LineN\n";
    
    Run Code Online (Sandbox Code Playgroud)
  • 我可以man为我的程序编写一个条目,但这不是非常便携,因为该应用程序将在Windows和Linux上使用得非常相似.

我知道这个问题可能是一个品味问题,但我很好奇是否有其他解决方案,我没有想到人们过去使用过.

理想情况下,开发人员(目前是我)很容易编辑和保持更新,但其他人不能真正搞砸它.

Sim*_*mon 8

考虑使用boost程序选项库.


mor*_*ndg 6

要打印帮助消息,我通常会使用一个函数.因此,您可以在启动时或在运行时使用它.例如:

void usage(char* progName)
{
  cout << progName << "[options]" << endl <<
      "Options:" << endl <<
      "-h | --help        Print this help" << endl <<
      "-v | --version     Print the SVN version" << endl <<
      "-V | --Version     Print the proxy version" << endl <<
      "-d | --daemonize   Run as daemon" << endl <<
      "-P | --pidfile     Path to PID file (default: " <<
        WPASUP_PROXY_DEFAULT_PID_FILE << ")" << endl <<
      "-l | --logging     Path to logging file (default: " <<
        WPASUP_PROXY_DEFAULT_LOGGING << ")" << endl <<
      "-i | --ip          The IP address of the main application (default: " <<
        WPASUP_PROXY_MAIN_APP_IP << ")" << endl <<
      "-p | --port        The port number of the main application (default: " <<
        WPASUP_PROXY_DEFAULT_MAIN_APP_PORT << ")" << endl <<
      "-w | --wpa_cli     Path to wpa_cli program (default: " <<
        WPASUP_PROXY_DEFAULT_WPA_CLI << ")" << endl;
}
Run Code Online (Sandbox Code Playgroud)

如果您愿意,也可以使用printf功能...我认为这是一种常见的做法,但如果有人有更好的想法,我会被捕!

问候!