2011年10月2日日曜日

CLangでクラスの中身を調べる(5)

さて、ようやくプリプロセッサを実行するところまで行った。と、プリプロセッサがエラーを出している。
In file included from D:\develop\Clang\temp.cpp:1:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 8\VC\INCLUDE/cstdio:5:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 8\VC\INCLUDE/yvals.h:6:
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\INCLUDE/crtdefs.h:40:2: error: #error ERROR: Only Win32 target supported!
#error ERROR: Only Win32 target supported!

どうも_WIN32をdefineせずにcstdioをインクルードしてはいけないらしい。ということで、predefineを追加してみる。
色々調べていくと、clang::PreprocessorにsetPredefines()というAPIがあり、またその設定値をclang::MacroBuilderで生成できることがわかった。
	std::string predefinesBuf;
	llvm::raw_string_ostream predefines(predefinesBuf);
	clang::MacroBuilder macroBuilder(predefines);
	macroBuilder.defineMacro("_WIN32");
	pp.setPredefines(predefines.str());

これでビルドして実行するとプリプロセッサがエラーを出さなくなった。ブレークポイントでPreprocessor::Lex()の結果を確認すると、何かしらデータは入っているようだ。ようやく先に進めそうだ。

0 件のコメント:

コメントを投稿