Command line LLVM命令行:如何重置参数?
我有两个用于解析参数的静态lib: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 全局列表应该是一
// 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;