我正在与Clang Libtooling合作。我需要在命令行中指定的某些文件上运行我的clang MyFrontendAction。
CommonOptionsParser OptionsParser(argc, argv, MyToolCategory);
ClangTool Tool(OptionsParser.getCompilations(), OptionsParser.getSourcePathList());
int i=Tool.run(newFrontendActionFactory<MyFrontendAction>().get());
我通过以下方式运行:
./(driver) file1 file2 --
它在file1和file2上运行我的工具。我只是想让它在file1上运行,并希望在file2上做一些其他的东西。我该怎么办?
答案 0 :(得分:1)
您可以创建自己的(已修改的)argc和argv,并将它们传递给OptionsParser构造函数。
int my_argc = argc - 1;
const char *my_argv[my_argc];
for (int i = 0; i < my_argc; ++i) my_argv[i] = argv[i];
const char *extra_file = argv[argc - 1];
现在你有my_argv包含提供工具的命令行和包含file2的extra_file。然后像往常一样继续:
CommonOptionsParser OptionsParser(my_argc, my_argv, MyToolCategory);
// etc.
如果这不是一个简单的工具,并且你想允许通常的论点,你将不得不做一些有点发烧友的事情。例如,您可以使用原始参数集创建CommonOptionsParser,然后读出getSourcePathList()的结果,并匹配原始argv中的第二个字符串以排除它。然后,您可以在ClangTool中创建第二个CommonOptionsParser以供实际使用。