0

我正在使用 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 上做一些其他的事情。我该怎么做?

4

1 回答 1

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,其中包含为您的工具和 extra_file 提供 file2 的命令行。然后照常进行:

CommonOptionsParser OptionsParser(my_argc, my_argv, MyToolCategory);
// etc.

如果这不是一个微不足道的工具,并且您想允许通常类型的参数,那么您将不得不做一些更花哨的事情。例如,您可以使用原始参数集创建一个 CommonOptionsParser,然后读出 getSourcePathList() 的结果,并匹配原始 argv 中的第二个字符串以排除它。然后,您可以创建第二个 CommonOptionsParser 以在您的 ClangTool 中实际使用。

于 2018-03-14T17:04:49.307 回答