[cfe-dev] ClangTool and the usual commandline options

Russell Wallace via cfe-dev cfe-dev at lists.llvm.org
Sun Dec 13 04:08:58 PST 2015


That works, thanks!

On Sun, Dec 13, 2015 at 11:44 AM, Manuel Klimek <klimek at google.com> wrote:

> On Sun, Dec 13, 2015 at 5:03 AM Russell Wallace via cfe-dev <
> cfe-dev at lists.llvm.org> wrote:
>
>> I'm writing a program that uses ClangTool to parrse C++ code; per the
>> tutorials, the main module looks as below.
>>
>> It works for a single file, but more complex inputs require the usual
>> commandline options to set include path, Microsoft compatibility mode et
>> cetera, and by default you only get a few options like -help and -version.
>>
>
> a) you use a compilation database (
> http://clang.llvm.org/docs/JSONCompilationDatabase.html), which is made
> to work well for multiple files with different sets of arguments
> b) you call your tool with
> ./bin/my-tool path/to/file.cc -- <compiler args>
>
>
>
>>
>> How do you get the usual set of commandline options that clang has?
>>
>> // Apply a custom category to all command-line options so that they are
>> the
>> // only ones displayed.
>> static cl::OptionCategory MyToolCategory("my-tool options");
>>
>> // CommonOptionsParser declares HelpMessage with a description of the
>> common
>> // command-line options related to the compilation database and input
>> files.
>> // It's nice to have this help message in all tools.
>> static cl::extrahelp CommonHelp(CommonOptionsParser::HelpMessage);
>>
>> int main(int argc, const char **argv) {
>>   std::set_new_handler([]() {
>>     errs() << "new: " << strerror(errno) << '\n';
>>     exit(1);
>>   });
>>
>>   sys::PrintStackTraceOnErrorSignal();
>>   PrettyStackTraceProgram X(argc, argv);
>>
>> #ifdef _WIN32
>>   // Stack overflow
>>   AddVectoredExceptionHandler(0, handler);
>> #endif
>>
>>   CommonOptionsParser OptionsParser(argc, argv, MyToolCategory);
>>   ClangTool Tool(OptionsParser.getCompilations(),
>>                  OptionsParser.getSourcePathList());
>>   return Tool.run(newFrontendActionFactory<MainAction>().get());
>> }
>>
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20151213/2c5f9fa6/attachment.html>


More information about the cfe-dev mailing list