Subversionでツリーのリビジョンをソースに書き込むには?

proj/ -+- include/ -+- hoge.h
       |            +- fuga.h
       |            `- defs.h
       `- src/ -+- main.cpp
                +- hoge.cpp
                `- fuga.cpp

こういう構成のソースツリーがあって main.o, hoge.o, fuga.o から a.out という実行ファイルを作るとする.この a.out が最新版のソースから作られていることを a.out --version あたりを通じて確認したい.ソースツリーはSubversionでバージョン管理されており,各ファイルに svn propset svn:keywords Id などすることは容易だ.しかし main.cpp で const char version_string[] = "$Id:$"; とするだけでは,hoge.cpp になされた重大な改変には気が付かない.かと言って各ファイルで同じことをやって

C:\build\proj\bin> a.out --version
$Id: hoge.h 436 2010-7-29 17:54:20Z taro $
$Id: fuga.h 420 2010-7-25 12:23:12Z saburo $
$Id: defs.h 390 2010-7-15 11:10:47Z jiro $
$Id: main.cpp 447 2010-7-31 15:12:18Z taro $
$Id: hoge.h 438 2010-7-29 18:03:42Z taro $
$Id: fuga.cpp 420 2010-7-25 12:23:12Z saburo $

とかやっても逆に何も分からない... (ソースツリーは数百ファイルから構成されると思ってほしい)
こういうときは,コマンドラインなら親ディレクトリのバージョンを見れば大体は解決する:

C:\build\proj> svn info
パス: .
URL: http://svn.example.net/proj/trunk
リポジトリのルート: http://svn.example.net/proj
リポジトリ UUID: 74e08888-8a67-584b-a7ce-fbc74a52e606
リビジョン: 447 ←※※※ これ ※※※
ノード種別: ディレクトリ
準備中の処理: 特になし
最終変更者: taro
最終変更リビジョン: 240
最終変更日時: 2010-05-27 03:00:57 +0900

この情報を main.cpp 内の const char[] version_string に自動で入れたい... どうするのがベストなのかなー.Makefile(もしくは,それ相当の何か)に

version_string.txt :
    svn info |egrep ^リビジョン |sed -re 's/(.*)/"\1"/' > $@

とか指定して, main.cpp では

const char version_string[] =
#include "../../version_string.txt"
;

とかやればいいのかもしれないが...,grepsedWindowsマシンの場合どこから調達するんだ? とか色々と悩みは尽きない.(Cygwinは嫌だからMSYS*1で済ませるべきか... )

*1:http://sourceforge.net/downloads/mingw/MSYS/BaseSystem/sed/sed-4.2.1-2/ 何もLZMAで圧縮するこたぁねーだろ... 嫌がらせか?