2010年5月18日火曜日

wxWidgets + OpenGL + Cygwin or Linux(Lenny) + Mercurial + Emacs + CEDET = 大混乱

Check
タイトルのとおり、学校では上記の環境で、家ではDebian(lenny)を使って開発していたら、覚えることが多すぎてブログを更新する暇すらなかった。本当はちょこちょこ覚えるたびに更新するのが理想なのだろうけど…

まずは、wxWidgetsによるOpenGLフレームの作成。現在のところ、三次元日誌さんの『wxWidgetsのOpenGL雛形』を丸写し。なさけないが、とりあえずはこれで必要なソースはできた。

次に、Cygwinでのビルド。コンパイラにいろいろなパラメタを与えなければいけないのだが、wx-configというコマンドを使うことでかなり楽をできる。
  • wx-config --cxxflags インクルードパスやコンパイルオプションなどを勝手にやってくれる
  • wx-config --libs gl コアライブラリやwxWidgetsのGL用ライブラリパスと名前の解決をやってくれる。GLが必要ないときは、glという引数を外せばよい。
実際にコマンドラインで使用するときは以下のようになる。
g++ main.cpp `wx-config --libs gl` `wx-config --cxxflags`
Lennyではこのままでもリンクまで通るのだが、Cygwinでやるとリンクエラーをおこしてしまう。libopengl32.lib.aを見つけきれないのが原因だと思われるので、上記のオプションに加え、-lopengl32を加えてやると無事通った。
g++ main.cpp `wx-config --libs gl` `wx-config --cxxflags` -lopengl32
Lenny上での実行イメージは以下のとおり。


さて、こういう風に作ったコードをリポジトリに保存して管理も一元化しようと思いたくなるのは人の常。くわえて、今学校の先生と一緒にいろいろ企んでいるので、他の人からも参照出来るようにしたい。

cvsやsvnあたりは定番だが、ディレクトリごとに管理用のファイルを作られてしまう上に、GitやMercurialといった分散型と比べるとちょっと古くさい気もしたので、今回はMercurialを選択することにした。Mercurialの何が良いって、デフォルトでhttpサーバとして機能するところ。ちょっと前まで、おうちのマシンでMercurialサーバーを動かしていたのですが、httpサーバーだとよほどのことがない限りwebフィルタリングにも引っかかりません。惜しむらくは、cvsやsvnはもとより、Gitと比較しても普及していないところでしょうか。もっと流行ってほしいな。

bitbucketというMercurial用のリポジトリサービスも発見したので、今はここを使わせてもらっています。

Mercurialの超簡単な操作説明。当然コマンドラインからです。Linuxはもちろんのこと、Windows、Cygwinと多くのプラットフォームから使用できます。今のところ私が使ったものだけを紹介。hgというのがMercurialのコマンド名。水銀のことだそうです。
  • hg init リポジトリをカレントディレクトリに作成。
  • hg clone http://foo.bar/ リモートにあるリポジトリをカレントディレクトリにコピー。
  • hg add filename filenameをローカルリポジトリに追加。
  • hg commit 変更をローカルリポジトリにコミットする。この時、オプションである-u usernameでコミットしたユーザを、-m "文字列"でエディタを開かずにメッセージを追加できます。
  • hg remove filename filenameを削除ののち、次回のコミット時にリポジトリから削除。
  • hg forget filename filenameをローカルリポジトリから外す。ファイル自体は消さない。
  • hg rename from to ファイル名をfromからtoに変更する。
  • hg push ローカルリポジトリをリモートにあるリポジトリへ送る。
  • hg pull リモートリポジトリからローカルリポジトリへコピー。 -uをpullの後ろにつけることで、即時にローカルリポジトリを更新。hg pull -uで1セットという感じ。他の使い方は知らん。
ざっとこんな感じ。設定ファイルは.hg/hgrcあたりをいじるのだが、正直コミット時のオプションで何とかなっているのでほとんど触ってない。

0 件のコメント:

コメントを投稿