是否可以从预编译头中提取原始文件名(文件路径)和编译语言?据我所知,Clang可能使用llvm-bcanalyzer
(LLVM位代码分析器)。那么,有人可以帮助我加入海湾合作委员会吗?
答案 0 :(得分:2)
对于clang,您只需解析预处理器输出即可轻松提取原始PCH文件名。
在示例中,header/header.h
是原始标头,pch/pch.h.gch
是预编译标头。
例如,以下命令:clang -E -include pch/pch.h main.cpp
返回我们可以找到原始PCH文件名的结果:
…
# 1 "/Users/user/pch_example/header/header.h" 1
…
# 1 "main.cpp" 2
int main() {return 42;}
不幸的是,即使您使用-fpch-preprocess
选项,解析预处理器输出也无法帮助我们使用GCC。所以我找到的唯一方法就是使用启用的依赖关系跟踪标记来编译PCH,如-MD (or -MMD)
。
例如,我们可以调用以下命令:gcc-6 -MMD -x c++-header header/header.h -o pch/pch.h.pch
。在这种情况下,GCC还会生成依赖文件pch/pch.h.d
,其中包含原始PCH文件名的路径。