Запустите ClangTool для определенных файлов, указанных в командной строке

Я работаю с 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

Решение

Вы можете создать свои собственные (модифицированные) 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.

0

Другие решения


По вопросам рекламы [email protected]