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 件のコメント:
コメントを投稿