2011-08-26 14 views
3

我正在寫一個控制檯應用程序,它正在迅速獲得許多命令行參數和標誌。爲此,我希望用戶能夠訪問這些標誌的描述以及它們的用途。在控制檯應用程序中包含「幫助」消息的最佳方式是什麼?

有幾種可能的解決方案,我能想到的

  • 我可以寫一個README文件,只是堅持在同一目錄中可執行文件。它的優點是簡單和便攜,但缺點是人們很容易刪除/編輯文件。
  • 我可以將整個消息粘貼到程序中的一個變量中,並在用戶輸入mycmd --help或類似內容時將其打印到屏幕上。優點,保持可執行和不可編輯的缺點在代碼中,因爲我會在下面浮動。

    const char[] helpmsg = "Line1\n" 
             "Line2\n" 
             "...\n" 
             "LineN\n"; 
    
  • 我可以寫我的程序man入境,但這個不是很便攜的應用程序將在Windows和Linux相當同等地使用。

我知道這個問題可能是一個品味的問題,但我只是好奇,如果有,我沒有想到的,人們在過去使用的任何其他解決方案。

理想情況下,開發人員(目前爲止)很容易編輯並保持更新,但其他人無法真正處理它。

+1

@Filip Ekberg糟糕的想法,這將重複信息,這從來不是一件好事,這將導致它們之間的差異。 – kebs

回答

8

考慮使用boost program options庫。

+0

這看起來像我之後。我看到你可以添加選項和描述到預期的輸入。從文檔中我不太清楚如何將這些內容打印到屏幕上,但我認爲它一定是可能的,否則給每個選項一個描述會有什麼意義。 – Dan

+0

請參閱[教程](http://www.boost.org/doc/libs/1_47_0/doc/html/program_options/tutorial.html)的「入門」一節。你可以流出boost :: program_options :: options_description對象。 – Simon

3

要打印幫助信息,我通常會使用這個功能。所以你可以在啓動時或運行時使用它。例如:

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; 
} 

您還可以使用printf函數,如果你喜歡...我認爲這是一個普遍的做法,但如果有人有更好的主意,我會interrested!

問候!

0

您可以使用getopt C library哪個目標正準備解析和使用多個選項(短或長格式)。

(當心還有與具有類似特徵的shell腳本中使用的getopts程序)

1

你也可以寫一個README和prog --help只是把它打印到控制檯。

相關問題