2009年3月1日日曜日

Vista環境その3 (Visual C++ 2008 Express Editionをbashから使う)

前回MinGWとその中のgccをインストールをしたは良いが、とりあえずg++は先延ばしにしておいた。MinGWのインストーラがg++で失敗するからだ。しかしCで書く事はほとんどなく、欲しいのはC++だ。なんとかしてMinGWのg++を入れようかと思ったが、やはりやめておくことにした。インストーラで成功しなかったのもあり、今後もちゃんとメンテされるのかに不安が残るし。それに、Windows上にLinuxと同じような環境を、とは言っても、そこまで無理する必要はない。cygwinもそうだけど。ちょっと無理矢理でしょ。win使うなら、まあ無理がないところからnativeなツールを使うようにはしたい。
Emacsとその中のbashとそこから使う基本的なコマンドはあまりにも頻繁に使ってきたので、それなしの環境は考えられないが。
という訳で、C++はMicrosoftのものを使ってみる事にした。
実はもう一つ理由がある。どのページだったか今探しても見付からなかったが、gcc, icc(Intel謹製コンパイラ)とVisual C++のパフォーマンスの比較をしてあるページがあったが、そこでVisual C++がとても速かったからだ。確か、Linux上のgccはもちろん、icc(on Linux)よりも速かったような。

ということでまずはMinGWとMsysをアンインストール。してもディレクトリや一部ファイルが残るのでそれらは自分で削除。その代わりwin用のbashのバイナリがあったところからリンクがあった、unix tools for windowsとかいうところのバイナリをいくつか入れた。この中にはmakeもある。実はMinGWのmakeはどうもいつも使っているGNU makeとは違う動きのようだった。こちらのmakeは大丈夫のようだ。

で、Visual C++ 2008 Express Editionをダウンロードしてインストール。
これはMicrosoftが無償で提共しているもので、他にもVisual Basic、Visual C#、Visual Web Developerがある。インストール・設定後に少し試してみたところ、STLはちゃんと入っている様子。ただしboostは無い。

これでGUIを作ったりIDEから使う気はあまりない。とにかくEmacsのshell(bash)から使えるようにしたい。
コマンドラインから、しかもbashからどう使えば良いのか、なかなかその手の解説は見付からないし、winの勘はないしで結構苦労したが、とりあえず~/.bashrcに次のような設定を加えることでbashの上からC/C++のファイルがコンパイルできるようになった。

VSINSTALLDIR="/Program Files/Microsoft Visual Studio 9.0"
VCINSTALLDIR="/Program Files/Microsoft Visual Studio 9.0/VC"
FrameworkDir="/Windows/Microsoft.NET/Framework"
FrameworkVersion=v2.0.50727
Framework35Version=v3.5
WindowsSdkDir="/Program Files/Microsoft SDKs/Windows/v6.0A"
DevEnvDir="/Program Files/Microsoft Visual Studio 9.0/Common7/IDE"

## **CAUTION** paths are separated by ";" in the following two
export INCLUDE="$WindowsSdkDir/include;$VCINSTALLDIR/include"
export LIB="$WindowsSdkDir/lib;$VCINSTALLDIR/lib"

export PATH="$WindowsSdkDir/bin":"$DevEnvDir":"$VCINSTALLDIR/bin":"$VSINSTALLDIR/Common7/Tools":"$FrameworkDir/$Framework35Version":"$FrameworkDir/$FrameworkVersion":"$VCINSTALLDIR/VCPackages":$PATH

visual c++のコンパイラのコマンド名は"cl"、リンカは"linker"だそうだ。これで


$ cl test.c





$ cl test.cc


とすればコンパイルできて、test.exeが作成される。ファイル内に日本語がある場合にはsjisにしておかないといけないようだ。Emacsの設定を変更しないと。

INCLUDEとLIBはclが参照する環境変数のようだ。名前の通り、インクルードファイルのあるディレクトリとライブラリ(DLL)のあるディレクトリを指すためのもの。
これは.bashrc内の設定だが、この二つはcl.exeというウインドウズプログラムにより参照されるという点を意識する必要があった。

bashでは、環境変数の、例えばPATHなどで、a, bという二つのパスを設定するには


PATH=a:b


のようにする。":"がセパレータだ。しかしwinではセパレータに";"を使う。
なので、INCLUDEには一つの文字列だけ設定し、その中にwinの環境変数として";"で区切った複数のパスを設定してある。bashのための設定としては普通こんな事はしない。

という訳で、とりあえずbashからVisual C++ 2008 Express Editionでコンパイルできるようになった。
C++でunixやwinに偏ったプログラムを書く気はないので、その範囲で使う分には恐らくこれで問題はないと思う。それにPythonなどこれまでインストールしてきたwin用のバイナリもほとんどはvisual c++でコンパイルしてあるようなので、むしろ相性は良いだろう。

あとはclやlinkerの細かいオプションを調べて基本的なMakefileを書いてしまうだけ。

そうそう、面倒なのでとても重要なもの以外はリンク張ってませんが、キーワードで検索すればすぐ見付かると思う。

0 件のコメント: