はじめに
gtkmmというGUIツールキットがあります。
次のようなものです。
gtkmmはGUIツールキットであるGTK+のC++バインディング。C++言語のオブジェクト指向機能を用いてGTK+ライブラリを利用することができる。
gtkmmはGTK+のラッパーであり、したがってUnix系OSのほかにもWindows、macOS上で動作する。
オープンソースの組込みOSであるMaemoでも機能制限版のgtkmmを利用することができる。
引用元 gtkmm https://ja.wikipedia.org/wiki/Gtkmm
その online book:
Programming with gtkmm 3
https://developer.gnome.org/gtkmm-tutorial/stable/index.html.en
の次の章:
Simple Example
https://developer.gnome.org/gtkmm-tutorial/stable/sec-basics-simple-example.html.en
にあるソースのコンパイルをやってみました。
環境・前提条件
Homebrew がインストールされていること
https://brew.sh/index_ja.html
$ brew --version
Homebrew 1.2.4
Homebrew/homebrew-core (git revision f41f; last commit 2017-07-09)
OS Xバージョン
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.12.5
BuildVersion: 16F73
手順
gtkmm3インストール
単純にHomebrewでgtkmm3
をインストールします。
$ brew install gtkmm3
PKG_CONFIG_PATH環境変数設定
Simple Exampleの記事にある、コンパイルの手順の引数のpkg-config
を実行すると、次のエラーになりました。
$ pkg-config gtkmm-3.0 --cflags --libs
Package gtkmm-3.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gtkmm-3.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gtkmm-3.0' found
メッセージにあるPKG_CONFIG_PATH
環境変数へパスを指定してみます。
手元の環境ではgtkmm-3.0.pc
下のパスにありました。
$ find /usr/local/Cellar -name "*.pc" | grep mm
/usr/local/Cellar/atkmm/2.24.2/lib/pkgconfig/atkmm-1.6.pc
/usr/local/Cellar/cairomm/1.12.2/lib/pkgconfig/cairomm-1.0.pc
/usr/local/Cellar/cairomm/1.12.2/lib/pkgconfig/cairomm-ft-1.0.pc
/usr/local/Cellar/cairomm/1.12.2/lib/pkgconfig/cairomm-pdf-1.0.pc
/usr/local/Cellar/cairomm/1.12.2/lib/pkgconfig/cairomm-png-1.0.pc
/usr/local/Cellar/cairomm/1.12.2/lib/pkgconfig/cairomm-ps-1.0.pc
/usr/local/Cellar/cairomm/1.12.2/lib/pkgconfig/cairomm-quartz-1.0.pc
/usr/local/Cellar/cairomm/1.12.2/lib/pkgconfig/cairomm-quartz-font-1.0.pc
/usr/local/Cellar/cairomm/1.12.2/lib/pkgconfig/cairomm-quartz-image-1.0.pc
/usr/local/Cellar/cairomm/1.12.2/lib/pkgconfig/cairomm-svg-1.0.pc
/usr/local/Cellar/glibmm/2.52.0/lib/pkgconfig/giomm-2.4.pc
/usr/local/Cellar/glibmm/2.52.0/lib/pkgconfig/glibmm-2.4.pc
/usr/local/Cellar/gtkmm/2.24.5/lib/pkgconfig/gdkmm-2.4.pc
/usr/local/Cellar/gtkmm/2.24.5/lib/pkgconfig/gtkmm-2.4.pc
/usr/local/Cellar/gtkmm3/3.22.1/lib/pkgconfig/gdkmm-3.0.pc
/usr/local/Cellar/gtkmm3/3.22.1/lib/pkgconfig/gtkmm-3.0.pc
/usr/local/Cellar/pangomm/2.40.1/lib/pkgconfig/pangomm-1.4.pc
PKG_CONFIG_PATH
環境変数へパスを指定し、
pkg-config
を実行するとまた違うエラーになりました。
$ export PKG_CONFIG_PATH=/usr/local/Cellar/gtkmm3/3.22.1/lib/pkgconfig
$ pkg-config gtkmm-3.0 --cflags --libs
Package atkmm-1.6 was not found in the pkg-config search path.
Perhaps you should add the directory containing `atkmm-1.6.pc'
to the PKG_CONFIG_PATH environment variable
Package 'atkmm-1.6', required by 'gtkmm-3.0', not found
エラーメッセージを見ては環境変数に追加し実行を繰り返した結果、
下のような環境変数設定になりました。
PKG_CONFIG_PATH=\
/usr/local/Cellar/atk/2.24.0/lib/pkgconfig:\
/usr/local/Cellar/atkmm/2.24.2/lib/pkgconfig:\
/usr/local/Cellar/cairo/1.14.10/lib/pkgconfig:\
/usr/local/Cellar/cairomm/1.12.2/lib/pkgconfig:\
/usr/local/Cellar/gdk-pixbuf/2.36.6/lib/pkgconfig:\
/usr/local/Cellar/glib/2.52.3/lib/pkgconfig:\
/usr/local/Cellar/glibmm/2.52.0/lib/pkgconfig:\
/usr/local/Cellar/gtk+3/3.22.16/lib/pkgconfig:\
/usr/local/Cellar/gtkmm3/3.22.1/lib/pkgconfig:\
/usr/local/Cellar/libepoxy/1.4.3/lib/pkgconfig:\
/usr/local/Cellar/libpng/1.6.30/lib/pkgconfig:\
/usr/local/Cellar/libsigc++/2.10.0/lib/pkgconfig:\
/usr/local/Cellar/pango/1.40.6/lib/pkgconfig:\
/usr/local/Cellar/pangomm/2.40.1/lib/pkgconfig:\
/usr/local/Cellar/pcre/8.37/lib/pkgconfig
その設定でpkg-config
を実行した結果です。
見やすいように改行を入れてます。
$ pkg-config gtkmm-3.0 --cflags --libs
-D_REENTRANT
-I/usr/local/Cellar/atk/2.24.0/include/atk-1.0
-I/usr/local/Cellar/atkmm/2.24.2/include/atkmm-1.6
-I/usr/local/Cellar/cairo/1.14.10/include/cairo
-I/usr/local/Cellar/cairomm/1.12.2/include/cairomm-1.0
-I/usr/local/Cellar/cairomm/1.12.2/lib/cairomm-1.0/include
-I/usr/local/Cellar/gdk-pixbuf/2.36.6/include/gdk-pixbuf-2.0
-I/usr/local/Cellar/glib/2.52.3/include/gio-unix-2.0/
-I/usr/local/Cellar/glib/2.52.3/include/glib-2.0
-I/usr/local/Cellar/glib/2.52.3/lib/glib-2.0/include
-I/usr/local/opt/gettext/include
-I/usr/local/Cellar/glibmm/2.52.0/include/giomm-2.4
-I/usr/local/Cellar/glibmm/2.52.0/lib/giomm-2.4/include
-I/usr/local/Cellar/glibmm/2.52.0/include/glibmm-2.4
-I/usr/local/Cellar/glibmm/2.52.0/lib/glibmm-2.4/include
-I/usr/local/Cellar/gtk+3/3.22.16/include/gtk-3.0/unix-print
-I/usr/local/Cellar/gtk+3/3.22.16/include/gtk-3.0
-I/usr/local/Cellar/gtkmm3/3.22.1/include/gtkmm-3.0
-I/usr/local/Cellar/gtkmm3/3.22.1/lib/gtkmm-3.0/include
-I/usr/local/Cellar/gtkmm3/3.22.1/include/gdkmm-3.0
-I/usr/local/Cellar/gtkmm3/3.22.1/lib/gdkmm-3.0/include
-I/usr/local/Cellar/libepoxy/1.4.3/include
-I/usr/local/Cellar/libpng/1.6.30/include/libpng16
-I/usr/local/Cellar/libsigc++/2.10.0/include/sigc++-2.0
-I/usr/local/Cellar/libsigc++/2.10.0/lib/sigc++-2.0/include
-I/usr/local/Cellar/pango/1.40.6/include/pango-1.0
-I/usr/local/Cellar/pangomm/2.40.1/include/pangomm-1.4
-I/usr/local/Cellar/pangomm/2.40.1/lib/pangomm-1.4/include
-I/usr/local/Cellar/pcre/8.37/include
-I/opt/local/include/harfbuzz
-I/opt/local/include/pixman-1
-I/opt/local/include
-I/opt/local/include/freetype2
-I/opt/local/include
-I/opt/local/include/freetype2
-I/opt/local/include
-L/usr/local/Cellar/atk/2.24.0/lib
-L/usr/local/Cellar/atkmm/2.24.2/lib
-L/usr/local/Cellar/cairo/1.14.10/lib
-L/usr/local/Cellar/cairomm/1.12.2/lib
-L/usr/local/Cellar/gdk-pixbuf/2.36.6/lib
-L/usr/local/Cellar/glib/2.52.3/lib
-L/usr/local/opt/gettext/lib
-L/usr/local/Cellar/glibmm/2.52.0/lib
-L/usr/local/Cellar/gtk+3/3.22.16/lib
-L/usr/local/Cellar/gtkmm3/3.22.1/lib
-L/usr/local/Cellar/libsigc++/2.10.0/lib
-L/usr/local/Cellar/pango/1.40.6/lib
-L/usr/local/Cellar/pangomm/2.40.1/lib
-lgtkmm-3.0
-latkmm-1.6
-lgdkmm-3.0
-lgiomm-2.4
-lpangomm-1.4
-lglibmm-2.4
-lgtk-3
-lgdk-3
-lpangocairo-1.0
-lpango-1.0
-latk-1.0
-lcairo-gobject
-lgio-2.0
-lcairomm-1.0
-lcairo
-lsigc-2.0
-lgdk_pixbuf-2.0
-lgobject-2.0
-lglib-2.0
-lintl
-Wl,-framework
-Wl,CoreFoundation
ソースをコンパイル
記事にあるソースをファイル名base.cc
で保存しました。
$ cat base.cc
#include <gtkmm.h>
int main(int argc, char *argv[])
{
auto app =
Gtk::Application::create(argc, argv,
"org.gtkmm.examples.base");
Gtk::Window window;
window.set_default_size(200, 200);
return app->run(window);
}
オプションに-std=c++11
を加えてコンパイルします。
実行ファイルbase
ができました。
kuwahara-mac:gtkmm3 mitsuaki$ g++ -std=c++11 base.cc -o base `pkg-config gtkmm-3.0 --cflags --libs`
kuwahara-mac:gtkmm3 mitsuaki$ ls -l base*
-rwxr-xr-x 1 mitsuaki staff 9772 7 9 19:43 base
-rw-r--r-- 1 mitsuaki staff 233 7 9 18:03 base.cc
実行する
Finderから実行ファイルbase
を実行すると、ターミナルが開き、Windowが表示されました。
以上です。
ありがとうございました。