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