对命令行中指定的某些文件运行ClangTool

时间:2015-07-07 14:24:42

标签: c++ clang libtooling

我正在与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上做一些其他的东西。我该怎么办?

1 个答案:

答案 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以供实际使用。