Синтаксис параметров программы Boost - PullRequest
15 голосов
/ 29 августа 2011

Я использую boost :: program_options , чтобы прочитать ввод пользователя из аргумента командной строки.Это работает очень хорошо и позволяет мне выводить полезные сообщения об использовании и проверять правильность ввода.Однако по умолчанию длинные имена опций должны идти после двойной тире, например --my_long_option, а короткие опции идут после одной тире , а должен быть одним символом, например;-m.

Есть ли способ либо ...

  • Разрешить длинные опции после одного -?
  • Разрешить коротким опциям иметь большечем один символ?

Таким образом, позволяя мне иметь командные строки, которые выглядят как

./a.out -myopt1 foo -myopt2 bar

Эти две возможности должны иметь одинаковый эффект, хотя с точки зрения программирования первая из них будетбудь лучше.Я посмотрел на boost :: program_options :: command_line_style , но не похоже, что он может делать то, что мне нужно.

Спасибо

Редактировать: В дополнение к принятому ответу, приведенному ниже, чтобы использовать его в этом стиле, необходимо добавить следующий код (в соответствии с соглашением об именах, приведенным в ускоренной документации)

po::store(
    po::command_line_parser(ac,av)
        .options(desc)
        .style(
            po::command_line_style::unix_style
          | po::command_line_style::allow_long_disguise)
        .run(),
    vm);

1 Ответ

23 голосов
/ 29 августа 2011

Короткие опции по определению имеют только один символ.Если бы их было больше, они были бы длинными вариантами.

Чтобы разрешить запуск длинных опций с одной чертой, включите стиль командной строки allow_long_disguise, , как описано на странице документации, которую вы связали.на :

Можно вводить длинные опции тем же символом, что и короткие, см. allow_long_disguise.

...