2. CompilerInvocation
CompilerInvocation对象主要是维护编译过程中需要用的的各种option,在创建CompilerInstance实例时会初始化一个CompilerInvocation对象,该对象类图见图 7,主要管理以下一些信息。
1. AnalyzerOptionsRef¶
管理一些代码分析过程中的选项,例如是否要忽略死代码,是否要对控制流图进行优化,是否要打印分析的函数、代码块等基本信息,是否把函数看做内联形式等。会影响编译器在对代码进行解析时的一些行为。

2. CodeGenOptions¶
管理IR生成时的一些选项,如main函数所在的文件,需要链接的外部符号,多线程模型、输出的LLVM IR的形式、依赖库、链接选项等。
3. DependencyOutputOptions¶
管理编译过程中的一些依赖信息,如头文件、目标平台依赖、系统标准库依赖以及一些以module形式存在的外部依赖。
4. FrontendOptions¶
管理前端一些行为,如打印一些基本信息(如性能分析数据、各种符号表的dump开关、时间戳等),前端分析的输入输出文件。
5. PreprocessorOutputOptions¶
管理预处理输出选项,如是否在输出中显示注释,#line等标识,是否打印包含的所有头文件,是否重写import关键字等。
CompilerInvocation有一个重要的方法setLangDefaults,该方法会告知clang前端即将编译的语言类型,以及目标特征,编译的语言版本等,对于OpenCL来讲,语言类型是OpenCL,标准是3.0。