2

boost::program_options解析に使用していますargv。私は両方を期待し-c--config

  boost::program_options::options_description description("Utility");
  description.add_options()
    ("help,h", "display this message")
    ("config,c", boost::program_options::value<std::string>(), "Path to configuration file")
    ("config-type", boost::program_options::value<std::string>()->default_value("json"), "type of configuration file (json|xml)")
    ("verbose,v", boost::program_options::value<int>()->default_value(2), "verbosity(0 to 2)")
    ("thread,t",boost::program_options::value<int>()->default_value(0), (boost::format("Max Thread Count %1% to %2%(Processor cores of this machine) if not multi threaded") % 0 % boost::thread::hardware_concurrency()).str().c_str())
    ("action,a", boost::program_options::value<std::string>()->default_value("pack"), "action to perfoem (pack|unpack)");
  boost::program_options::positional_options_description positional_description;
  positional_description.add("action", -1);

  boost::program_options::variables_map var_map;
  boost::program_options::store(boost::program_options::command_line_parser(argc, argv).options(description).positional(positional_description).style(boost::program_options::command_line_style::unix_style).run(), var_map);
  boost::program_options::notify(var_map);

  if(var_map.count("help")){
    std::cout << description;
    return 1;
  }
  if(var_map.count("config") < 1){
    std::cout << "No Configuration file added" << std::endl;
    return 1;
  }

  if(var_map.count("action") < 1){
    std::cout << "Please specify an action to perfoem (pack|unpack)" << std::endl;
    return 1;
  }

しかし、--config fまたは--config=fまたは--config="f"機能せず、機能しますが印刷さNo Configuration file addedれます-c f
また--config、引数なしで使用するとrequired parameter is missing in 'config-type'、すでにデフォルトのパラメーターがあるという例外がスローされます。

4

1 に答える 1

1

あなたの問題はここで説明されているものとまったく同じようです:boost :: program_options-コマンドラインオプションに対して正確な文字列照合を行いますか?

私はブースト1.42でubuntuを使用していますが、ubunturepoにはそれ以上のバージョンがありません。しかし、1.42はそのバグですか?

はい。

--configとの仕様を入れ替えることで、問題を回避できます--config-type

よりクリーンな解決策は、Boostをアップグレードすることです。言及されたSO回答のVladimirPrusは、バグが1.45で修正されたと述べています。あなたが書いたことから、あなたはUbuntu 11.04(Natty Narwhal)を使用していると思います。次のいずれかを実行できます。

  1. Ubuntu 11.10(Boost 1.46)またはUbuntu 12.04(Boost 1.48)から新しいBoostパッケージをインストールします-/etc/apt/sources.listでそれぞれ11.10または12.04をnattyをoneiricまたはexactに一時的に置き換えます
  2. Boostバックポートを含む新しいBoostパッケージPPAをインストールします(例:https ://launchpad.net/~purplekarrot/+archive/ppa )
  3. Xeoが提案したように、ソースからBoostをビルドします。
于 2012-08-19T20:38:32.940 に答える