LoginSignup
2
3

More than 5 years have passed since last update.

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

Posted at

はじめに

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

gtkmm-simple-example.png

以上です。
ありがとうございました。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3