Boost.program_options を使用して、POSIX ユーティリティの実装のコマンドラインを解析しています。簡単な例として、 を取り上げcmp
ます。
ここで、すべての引数の説明を示す追加の引数--help
が必要です。これは、この場合に重要です。私は持っている:
po::options_description options("Options");
options.add_options()("help", "Show this help output.")
(",l", "(Lowercase ell.) Write the byte number (decimal) and the differing bytes (octal) for each difference.")
(",s", "Write nothing for differing files; return exit status only.")
po::positional_options_description operands;
operands.add("file1", 1);//, "A pathname of the first file to be compared. If file1 is '-', the standard input shall be used.")
operands.add("file2", 1);//, "A pathname of the second file to be compared. If file2 is '-', the standard input shall be used.");
po::variables_map vm;
po::store(po::command_line_parser(argc, argv).options(options).positional(operands).run(), vm);
po::notify(vm);
if(vm.count("help"))
{
std::cout << "cmp: compare two files\nUsage: cmp [ -l | -s ] file1 file2\n" << options;
return 0;
}
オプションの説明file1
を表示できません。file2
もちろん、それらを に追加することもできますがoptions
、これにより少なくとも 2 つの不要な引数が追加されることになり[-]-file{1,2}
、これは本当に望んでいません。この出力が必要なだけです--help
(明らかにハードコーディングせずに):
cmp: compare two files
Usage: cmp [ -l | -s ] file1 file2
Options:
--help Show this help output.
-l (Lowercase ell.) Write the byte number (decimal) and the differing bytes (octal) for each difference.
-s Write nothing for differing files; return exit status only.
Operands:
file1 A pathname of the first file to be compared. If file1 is '-', the standard input shall be used.
file2 A pathname of the second file to be compared. If file2 is '-', the standard input shall be used.
ライブラリをハッキングせずにこれを達成する方法はありますか? これはかなり基本的なものだと思いますが、どのチュートリアルにもありません。
更新みんなの利益のために、うまくいけば後方互換性のある方法で、これに対する機能要求を送信しました。