【发布时间】:2015-03-17 13:14:46
【问题描述】:
我正在开发一个可以从以下位置读取选项的命令行工具:
- 命令行参数
- 可选配置文件
我使用Boost Program Options 阅读了这些选项,它几乎可以正常工作。
我的代码是这样的:
namespace po = boost::program_options;
namespace fs = boost::filesystem;
po::variables_map vm;
po::store(po::parse_command_line(argc, argv, options), vm);
po::store(po::parse_config_file(ifs, options, true), vm);
po::notify(vm);
但是,其中一些选项是文件路径,我希望这些选项相对于选项的来源。这是我的意思的一个例子:
假设我的工具位于:/usr/local/bin
mytool --foo.path ../config/assets/toto.txt
解析后,foo.path 选项应该是/usr/local/config/assets/toto.txt 的绝对路径。
现在,如果我在位于/usr/local/config/myconf.cfg 的配置文件中指定foo.path,如下所示:
foo.path=assets/toto.txt
我希望路径相对于配置文件(而不是执行路径),并且生成的绝对路径与以前相同。
在 Boost Program Options 中有没有办法知道选项的值来自哪里,以便在将相对路径转换为绝对路径时调整路径?
【问题讨论】:
标签: c++ path boost-program-options