Open4

msbuildのbinlogをJSONか何かに変換したい

okuokuokuoku

最近のMSBuildには実行トレースをバイナリ形式でログに保存できる /binaryLogger オプションがある。これを読みとって何とか compile_commands.json のようなビルドログを生成したい。

直接的に出力するLoggerとしては https://github.com/0xabu/MsBuildCompileCommandsJson がある。これをオフラインでやりたい。

... Xcodeの方が割と厳しくて、 set-xcode-analyzer でダミーに差し替えるか、xcprettyがまだ動くことに賭けるか。。まぁ手元の環境ではCMake以外の方法でXcodeのプロジェクトを作ることが無いので、手動でXcodeプロジェクトを書き換えるのが簡単だとは思うけど。

okuokuokuoku

.binlog の生成

chcp 850
cmake --build . --target clean --config RelWithDebInfo
msbuild /bl:pass0.binlog /p:Configuration=RelWithDebInfo /p:Platform=Win32 fakegl.sln

幸い、日本語のコードページは英語とは違うので、 chcp コマンドで適当なコードページに変更すると出力メッセージが英語に統一される。

/bl オプションは /binaryLogger の省略系。追加のパラメタは https://msbuildlog.com/#commandline に説明がある。

okuokuokuoku

環境変数、カレントディレクトリ、プロパティの収集は不要か?

MSBuildが出力するログ TaskCommandLineEventArgs はコマンドラインしか含んでいない。

MSBuildにおいて環境変数はプロパティなのでプロパティを追うことになる。 PropertyInitialValueSetEventArgs とか PropertyReassignmentEventArgs が相当する。 ...必要かなコレ。。常識的な msbuild プロジェクトは LIB のようなビルドに影響する環境変数を変更することはないので、単純にログ取得する msbuild の起動時の環境変数を収集すれば十分な気がする。

同様に、常識的な msbuild プロジェクトはカレントディレクトリを変更しない。