我正在编写一个C ++应用程序 A ,它在后台调用另一个应用程序 B 。某些命令行选项适用于应用程序 A ,但有些应该转发到 B 。分离应该使用双短划线--
。
例如:
./my_executable_A -a --long_b some_file -- -c --long_d
在应用 A 中解析{"-a", "--long_b", "some_file"}
并在 A 调用 B 时转发{"-c", "--long_d"}
我认为将boost::program_options
用于任务可能有意义,但我没有找到此功能。这可能吗?
注意:用例是libfuse
文件系统,其中一些选项将转发到fuse_main()
函数。
答案 0 :(得分:2)
没有内置的支持。我建议只是从整个argv数组创建一个std :: vector,找到“ - ”,如果找到,切片向量并将第一部分传递给program_options(它也接受std :: vector)和第二部分到您的计划。
答案 1 :(得分:2)
这是默认行为(如果没有记录)并且至少已经升级1.33; --
is considered a "terminator"之后的所有命令行参数以及positional options后的所有命令行参数:
bool a = false, b = false;
std::vector<std::string> command;
po::options_description desc("Allowed options");
desc.add_options()
("long_a,a", po::bool_switch(&a), "a")
("long_b,b", po::bool_switch(&b), "b")
("command", po::value(&command));
po::positional_options_description p;
p.add("command", -1);
po::variables_map vm;
po::parsed_options parsed = po::command_line_parser(argc, argv).options(desc).positional(p).run();
po::store(parsed, vm);
po::notify(vm);
答案 2 :(得分:1)
您可能拥有的一个选项是让它们全部作为参数进入,并且在' - '之后将这些参数存储在另一个发送到分叉进程的char **中。请注意,在fork之前,您需要设置输出和输入,以便它们可以相互通信,具体取决于您希望应用程序B执行的操作