Posted at

MacでgtkmmのSimple Exampleをコンパイルしてみた

More than 1 year has passed since last update.


はじめに

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が表示されました。

以上です。

ありがとうございました。