Command line LLVM命令行:如何重置参数?

Command line LLVM命令行:如何重置参数?,command-line,llvm,Command Line,Llvm,我有两个用于解析参数的静态lib: // lib1 void main(int argc, const char **argv) { cl::opt<bool>LibOption1( ... ) // arg1 cl::ParseCommandLineOptions(argc, argv, "lib1\n"); } void main应该是什么main返回int,在任何情况下,库都不能提供main。如果这是在某个名称空间中,仍然请不要编写voidmain 全局列表应该是一

我有两个用于解析参数的静态lib:

// lib1
void main(int argc, const char **argv) {

  cl::opt<bool>LibOption1( ... ) // arg1
  cl::ParseCommandLineOptions(argc, argv, "lib1\n");
}

void main
应该是什么
main
返回
int
,在任何情况下,库都不能提供main。如果这是在某个名称空间中,仍然请不要编写
voidmain


全局列表应该是一个特性,这样每个库都可以提供自己的(不同名称空间的)参数。库不应调用
cl::ParseCommandLineOptions
本身;只有真正的main函数才能做到这一点。此外,在库中,
cl::opt
作为局部变量是没有意义的,因为它只在该函数的持续时间内存在。(如果您是应用程序,那么您可以安排在
cl::opt
过期之前调用
cl::ParseCommandLineOptions

函数名和返回值在我的情况下没有意义。让我们认为函数是
func1
func2
。事实上,两个lib都使用cl::来解析参数。在大多数情况下都没有问题,因为cl::list init在工具中使用一次,因为main()函数声明一次,解析在一开始就发生。假设有两个函数执行参数解析,它们应该处理不同的参数,并且都使用cl::
// lib2
void main(int argc, const char **argv) {

  // need to reset arguments list here ..

  cl::opt<bool>LibOption2( ... ) // arg2
  cl::ParseCommandLineOptions(argc, argv, "lib2\n"); // crash here!
}
/// RegisteredOptionList - This is the list of the command line options that
/// have statically constructed themselves.
static Option *RegisteredOptionList = 0;