Używam Boost.program_options do analizy poleceń dla mojej implementacji narzędzi POSIX. Jako prosty przykład weź cmp
.Jak wyświetlić opis operandu wiersza polecenia w --help output
Teraz chciałbym mieć dodatkowy argument --help
, który pokazuje opis wszystkich argumentów, co jest w tym przypadku ważne. Mam:
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;
}
który jest w stanie wykazać, opis file1
i file2
Opcje. Mogę oczywiście dodać je do options
, ale doda to co najmniej dwa niechciane argumenty: [-]-file{1,2}
, których naprawdę nie chcę. Chcę tylko to wyjście dla --help
(oczywiście bez hardcoding go):
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.
Czy istnieje jakiś sposób, aby osiągnąć ten cel bez hacking wokół biblioteki? Sądzę, że to dość podstawowe rzeczy, ale nie mogę ich znaleźć w żadnym z tutorials.
AKTUALIZACJA Dla dobra wszystkich osób przesłałem do tego feature request w sposób zgodny z wcześniejszymi wersjami.
Złe wieści, niestety ': (' – rubenvb