我正在开发文本编辑器(几乎是 IDE),并且在幕后使用 llvm/clang(标记化、诊断)。几乎每个编辑的文件都包括主头文件,其中还包括一些头文件,其中包括一些其他头文件(包含文件的树):
UserFile.h
L----MainHeader.h
L----string.h
L----device.h
| L----(in some conditions)---concreteDevice.h
L----math.h
|
...
主要思想是跳过重新解析在编辑“UserFile.cpp”clang_parseTranslationUnit
和clang_reparseTranslationUnit
调用期间保持不变的标题。
我读过 Clang 的链式预编译头文件甚至模块,这似乎是我需要的。
我已经为MainHeader.h
like生成了 PCHclang++ -x c++-header MainHeader.h -emit-pch -o MainHeader.h.pch
并使用它 like clang++ -include-pch MainHeader.h.pch ...
。我不确定它是用于整个标题树(链接)还是仅用于该文件(很可能)。
CXTranslationUnit_PrecompiledPreamble
由于有clang 选项,我是否需要链接的预编译头文件?
如何生成链接的预编译头文件?
由于多个头文件树非常复杂,#ifdef SOME_CONDITION .. #include <SomeHeader.h> #endif
并且很难理解整个树并PCH
手动为每个头文件预编译(但我知道-DSOME_CONDITION
要传递的参数会影响包含树)。