記事一覧:2007年04月10日

WinXPでcygwinを使わずにUNIX互換環境を作る(1):コンパイラ環境を整える

Win環境でUNIX互換環境を作るといえばcygwinが真っ先に浮かぶわけですが、以下の理由で個人的にcygwinは嫌いなのですよ。


・cygwin環境とコマンドプロンプト環境が切り分けられてしまう

・パス指定がごっちゃになる

・cygwinはXとかを入れないで標準コンソールだけで使う場合、デフォルトの日本語環境が酷い

・cygwin環境のPerlはところどころ動きがおかしいくさい(とりあえずatimeとかの扱いでハマッた経験あり)

・時々DLLのバージョン違いとかではまったりする



ということで、cygwinを使わずに、WinXP環境にできるだけUNIX互換環境(というかプログラミングで困らない環境)を組み立ててみようというのが趣旨。



実は、コマンドラインベースのツールなら結構Windows環境でコンパイルできて使えてしまったりするのでそれで意外に簡単に環境は整えられたりするのです。さあ、脱cygwin!



さて。まず必要なのがコンパイラ環境の構築。幸いにも、MSがVC++の無償版やWindowsのSDKを無償公開してくれているので、そいつらを導入するだけでコンパイラ環境は簡単に構築できます。



VC++はMSの「 Visual C++ 2005 Express Edition 日本語版 」ページからダウンロード可能。インストーラではコンパイラだけでなく、IDEやドキュメントもインストールできるけど、とりあえず必要なし。



WindowsのSDKは同じくMSの「 Windows Server 2003 SP1 Platform SDK Web Install 」からダウンロードできます。こちらには64ビット環境向けのコンパイル環境や各種ドキュメントなども含まれていますが、とくに必要なし。いくつかのSDKがインストールできますが、以下のSDKを入れておけばいいでしょう。


  • Core SDK
  • Internet Development SDK
  • IIS SDK
  • MDAC SDK
  • Windows Installer SDK
  • WMI SDK
  • Windows XP SP2 SDK


ちなみに、先にPlatform SDKを入れておくとVC++ Express Editionを入れたときに自動的にPlatform SDKを入れる環境もセットアップされるらしいです。

で、それぞれをインストールするとスタートメニューに

「Visual C++ 2005 Express Edition」→「Visual Studio Tools」→「Visual Studio 2005 コマンド プロンプト」

とか、

「Microsoft Platform SDK for Windows Server 2003 SP1」→「Open Build Environment Window\Windows XP 32-bit Build Environment」→「Set Windows XP 32-bit Build Environment (Retail)」

が追加され、ここから環境変数設定済みのコンソールが開けたりするわけですが、デフォルトでは「Visual Studio 2005 コマンド プロンプト」を開いてもWindowsの開発ライブラリのパスが設定されなかったりします。

ということで、VC++ Express Editionのインストールディレクトリ(デフォルトではC:\Program Files\Microsoft Visual Studio 8\)ディレクトリ以下のCommon7\Tools\以下にある「vsvars32.bat」の最終行、「:end」のあとに下記の一行を追加して「Visual Studio 2005 コマンド プロンプト」から完全な開発環境が開けるように設定しましょう。
call "C:\Program Files\Microsoft Platform SDK\SetEnv.cmd" /XP32 /RETAIL

もちろん、Platform SDKのインストール場所に応じてドライブレターとかパスは修正して下さい。あと、「/RETAIL」を「/DEBUG」に変えればデバッグ環境になったりします。



これで開発環境出来上がり。GNU makeとかtarとかgzipとかコンパイルできちゃいます。



続く。



てか、よく見たら

「Microsoft Windows Server 2003 R2 Platform SDK Web Install」なんてものも出てるのね。見チェックですがこちらも使えるんじゃないでしょうか。