2016-12-08 9 views
0

プリコンパイル済みヘッダから元のファイル名(ファイルパス)とコンパイル言語を抽出できますか?私が理解しているように、llvm-bcanalyzer(LLVMビットコードアナライザ)を使用しているClangにとって可能です。だから、誰でもGCCで私を助けることができますか?プリコンパイル済みヘッダの元のファイル名

+0

プリコンパイル済みのヘッダーは、おそらく多くの(継承された).hファイルを結合します。シークするのはどのような名前ですか? – kay

+0

プリコンパイル済みヘッダーのソースである元のヘッダー名を見つけようとしました。ドキュメンテーションによると、次のコマンドを使用してPHCを作成できます。gcc -x c-header ** test.h ** -o test.h.gch私の場合、** test.h ** – vromanik

+0

はいへのパスを抽出したいと思います。 Clangは私にその情報[Clang PHC内部メタデータ](http://clang.llvm.org/docs/PCHInternals.html#ast-file-contents)を受け取ることができます。 – vromanik

答えて

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で私たちを助けていません。だから私が見つけた唯一の方法は、-MD (or -MMD)のような有効な依存性追跡フラグを使ってPCHをコンパイルすることです。

たとえば、次のコマンドを呼び出すことができます。gcc-6 -MMD -x c++-header header/header.h -o pch/pch.h.pchこの場合、GCCはさらに、元のPCHファイル名へのパスを含む依存ファイルpch/pch.h.dを生成します。

関連する問題