2012年10月10日水曜日

eclipseでC++でGTKで動かす(その1)

先月末ごろ

筆者「じゃんけんマシンの基礎キターーー(略」
筆者「・・・でもどう頑張っても20fpsくらいしか出ない。
  しゃーなしC++やってみるか。死ぬほど嫌だけど。」

ということでC++の 勉強を始めました。今回はそのメモ

eclipseだとCDT(C Develop tool(?))というのをいれるとC/C++が使えるようになる。
CDT入れるとこまではググってどうにか・・・・

で、問題はここからだよ。先週の土日を消費しても間に合わず今日(いまさっき)どうにか到達

1,gtkmm(pythonでいうところのpygtkにあたるもの)の導入


sudo apt-get install libgtkmm-3.0-dev  

sudo apt-get install libgstreamermm-0.10-dev 

sudo apt-get install libgdamm4.0-dev 
 
という感じでインストールするだけ(ubuntu12.04)。 

2,gtkmmの動作を確認

ようつべにて
 「Creating a simple GUI programm with C++ and GTKMM with a Button」
という偉大な動画からテスト用のコードを拝借

#include <gtkmm.h>

int main( int argc, char *argv[] )
{
    Gtk::Main kit( argc, argv );
    Gtk::Window window;
    
    Gtk::Main::run( window );

    return 0;
}

これでウィンドウが表示できるぜ!!ってなればよかったんだけどね・・・
 
当然コンパイラが<gtkmm.h>とかいうのをどここから探して
持ってこないといけないわけでして・・・
 
ここでeclipseの設定をいじらないといけなくなりました。
まあ当然と言われるとそうなんだが。

以下設定のしかた。 
1,プロジェクトのプロパティから下のような設定画面を出す。
  ここでC/C++ビルドの「設定」をクリック

 
 
 
2,この中の 「〜C++ Compiler」の「その他」をクリック
 
 
 
 で、「その他のフラグ」に`pkg-config --libs --cflags gtkmm-3.0`と書いておく
(かいせつ) 
「`」はshift+@キーで出る(shift+7キーじゃないよ) 
 pkg-config はいつの間にか入ってたがアプリっぽい。もし無いなら入れるべし。
 --libs --cflags はpkg-configのオプション。C++(多分Cも)にインクルードする関連の
ファイルのパスを全部表示してくれる便利な奴。  

これでgtkmm使うに当って必要なファイルは全部リンク出来る感じになる。多分他のツール
(opencvとか)使うときにも活用できる。
その他の3つほど上に「インクルード」とかいうのがあってそれで
参照するパスを入れることもできるが(多分そっちが普通か?)
gtkmmは参照ファイルが多いので止めた方がいい。 日が暮れるので。
 
 
 
 これで使えたらいいんだけどまだやることがある。
今まで触ってた項目の親である「GCC C++ Compiler」をクリックして「エキスパート設定
コマンド行パターン」とかいう難しそうなところに注目。


どうやらここでコンパイル時のコマンドラインの入力順を規定しているっぽい。
eclipseも所詮はコマンドライン入力を自動でやってくれるだけの存在でしかない。

ここで「g++ (ファイル名)(オプション)(出力ファイル名)(なんとか〜)」の()の
順番をいろいろ入れ替えられるようになってる(はず)。

デフォルトだとgtkmm込のコンパイルが通らないのでここの順番を
${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}
から
${COMMAND} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS} ${FLAGS}
に変更(ここの丸写し。いいのだろうか:スタックオーバーフロー
  
でビルド→実行→窓出現
ビルドで警告出るし、実行で「必要なプロジェクトにエラーがあります」とか出るけど
無視して実行(そのうち解決できるといいね)。


結果↓
 
 
 pythonなら10分くらいで出来そうな話だったけどさすがC++。そらみんな別の言語使うわ。
 気軽にGUI作れるgladeっていうソフトで作れるようになるとこまで持っていくので次回へ
 続く(諦めてpythonに戻ったら続かない)
 

0 件のコメント:

コメントを投稿