RVCT3.0 のエラー形式
RVCT3.0 の ARM コンパイラは、ちゃんとコンパイラオプションを指定することで日本語エラーを出力してくれます。英語を直訳したような日本語な感じもするけど、それでも自分にはとっても便利。
以下のフラグを設定すると日本語になります。
--message_locale ja_JP
また、このエラーメッセージの形式も指定することができて、--diag_style の次に arm, ide, gnu のどれかを指定します。
それぞれ以下のようになります。
// arm の場合 "test.c", line 352: Error #11-D: unrecognized preprocessing directive // ide の場合 test.c(352,10) : error #11-D: unrecognized preprocessing directive // gnu の場合 test.c:352:10: Error: #11-D: unrecognized preprocessing directive
VisualStudio で ARM コンパイラを使う場合は ide を指定しておけば、ダブルクリックしたときにちゃんとその行番号に飛べるはずです。
なぜなら、上記の ide のエラー表示は以下の書式を満たしているからです。
出力の書式は次のとおりです。
{filename (line# [, column#]) | toolname} : [anytext] {error | warning} code####: Localizable String [ any text ]カスタム ビルド ステップまたはビルド イベントの出力の書式設定
これで日本語のエラー表示ができて、しかもそのエラーをダブルクリックするだけでその行番号へ飛べるはずです。
しかし、しかし。
日本語のエラー表示と ide を指定した場合のエラー表示は以下のようになります。
test.c(352、10) : error #11-D: ほにゃらら
↑の書式と見比べれば分かりますが、line の次の文字が「,」でなくなっているため、VisualStudio のエラー形式ではないと判断されて、ダブルクリックで飛ぶことができなくなってしまうのです。
まあ、この中途半端な対応に文句を言っても仕方が無いので、とりあえず出力される文字列を変換するための exe を C# で適当に書きました。
// Pipe.exe static void Main(string[] args) { args = args.Select(s => s.Trim('\"')).ToArray(); ProcessStartInfo info = new ProcessStartInfo(args[0], "\"" + string.Join("\" \"", args, 1, args.Length - 1) + "\""); info.RedirectStandardError = true; info.UseShellExecute = false; Console.WriteLine("command: " + info.FileName); Console.WriteLine("arguments: " + info.Arguments); Process p = Process.Start(info); Console.Write(p.StandardError.ReadToEnd().Replace('、', ',')); p.WaitForExit(); }
与えられた引数をそのまま実行するだけのプロセスです。このプロセスは、標準エラーに出力される文字列を '、' から ',' に変換して出力します。
Pipe.exe armcc -c -o test.o --message_locale ja_JP --diag_style ide test.c
と書けば、ちゃんと
test.c(352,10) : error #11-D: ほにゃらら
となってくれます。
結局やることは前のバージョンと同じ……orz