GCCのspecsとはGCCのspecsとはGCCのspecsとはGCCには、GCC-3系まで、specsというファイルがあった。これは、GCCのデフォルトの動作を決定するファイルで、かなり重要なものだ。標準のシステムインクルードパス、例えばデフォルトでリンクされるライブラリ(glibcやMinGWで言えばlibmsvcrt)等が記述されており、hello-worldを書く時にさえ必要ということになる。このファイルはMinGWならば<mingw>/lib/gcc/mingw32/<gcc-ver>/にあり、編集することでGCCのデフォルトの挙動を変更することが可能だ。MinGWはMSYS上から使用する限りは特に問題なくとも、コマンドプロンプトなどから直接MinGWを使用する場合にはこのファイルを修正し、標準のシステムインクルードパスを記述しなければ、まともに使用できないこともある。そもそものgccの仕組みGCCを利用するため、普段何気なくgccと打ち込んではいるが、例えばMinGWのgcc-3.4.5ではgcc.exeが88KBしかない。誰がどう考えても、gcc.exeが全て処理しているとは思えない。正解は、<mingw>/libexec/gcc/mingw32/<gcc-ver>/以下にcc1.exeという3MBを超える実行ファイルが存在し、こちらがgccコンパイラ本体となっている。そんなややこしいことをするのか。それは、gccが多機能すぎることから、処理を分散させるためである。gccは、そのコマンドだけで、プリプロセッサからアセンブラ、コンパイラ、リンカの役目まで果たしている。これを全て1つの.exeが賄うのは、不可能では無いにしても、管理上好ましくない。実際にはgccはリンカにld.exeを使用するし、コンパイラにはcc1.exeを使用する。gcc.exeはフロントエンドでしかなく、実際に動作すべきプログラムはgcc.exeが判断して振り分けている。specsその際の振り分け規則や、内部的にデフォルトで使用するオプションなどを記述するのがspecsファイル、というわけだ。specsファイル相当のものは実はGCCをビルドする際にGCCのバイナリにも埋め込まれているが、この設定をオーバーライドするのがspecsファイルになる。ビルド環境と実行環境が異なっても、これにより差異を吸収することができる。-dumpspecsで表示される。実際にspecsを編集する場合には、この内容をリダイレクトし、上記ディレクトリに置いて編集するのがよい。specsファイルの記述方法specsの中身は、かなりごちゃごちゃとした表記になっていると思う。<実行するコマンド>の形式になっている。%()等のマクロや変数展開であり、初めて見た人間にはBrainfuckやWhitespaceのような変態言語の一種のようにも見える。以下のTDM版gcc-4.4.0のdumpspecsを見てみて欲しい。%{E|M|MM:%W{o*}}最初のエラー的メッセージと最後のマクロ定義等のあたりは分からないでもないが、なんとなーく、気分的には、変態言語のFalseに近いようにも感じる。実用・specsファイル正直上記の内容を解説する気にはなれないので、ここでは簡単な実用例を示す。MinGWをC:\msys\mingw-3にインストールしているとする。システムインクルードパスの追加もっともよく使う例。%{mthreads:-D_MT}という箇所を探し出し、プリプロセッサオプションの-Iを加えればよい。C:/msys/mingw-3/includeこの際、Windows上での絶対パス表記にしているのがポイントだ。MinGWは元々MSYSに依存しないので、MSYS依存のパス表記は使わない方がよい。システムライブラリパスの追加specsファイル中で*link_libgcc:%Dという箇所を探し出し、リンカオプションの-Lを加えればよい。fileという記事がある。themという解説がある。GCC4でのspecsこの記事の冒頭では何気なく、「GCC-3系まで」と書いた。実は、GCC-4系ではspecsファイルは標準で含まれない。細かな意図などは調査していないが、とにかくGCC-4系ではspecsファイルは通常、不要になった。特別な目的があるなら、ただ書いて置けば使用されるようになっている。よって、GCC-4.4.0のマニュアルにもspecsファイルの解説は存在する。Perl5.010001。