GTK+アプリケーションをLinuxでビルドする

以前の記事で、WindowsにMinGW GCCをインストールしてGTK+アプリケーションを作成する方法を紹介しました。今回は、その時に使ったソースコードをそのままLinuxでビルドしてみます。使用するLinuxディストリビューションはUbuntu 17.10です。

ソースコード

GTK+アプリケーションのサンプルソースコードは以下の構成になっています。

以下のリンクからサンプルコードをZIP形式でダウンロードできます。

何も準備せずにビルドしてみる

ソースコード一式をUbuntu(Linux)へコピーしてmakeコマンドを実行してみます。

sample-gtkmmをビルドする(1回目)
$ make The program 'make' can be found in the following packages: * make * make-guile Try: sudo apt install <selected package>

makeコマンドがインストールされていないためビルドすることはできませんでしたが、以下のメッセージが表示されました。

日本語訳
プログラム 'make' は以下のパッケージにあります。 * make * make-guile 試して: sudo apt install <選択したパッケージ>

どのパッケージをインストールすればmakeコマンドが使えるようになるのか教えてくれるんですね。これは便利です。

必要なコマンドをインストールする

不足しているmakeパッケージをインストールしていきましょう。

makeパッケージをインストールするコマンド
$ sudo apt install make

他にもg++pkg-configが必要になるので一緒にインストールしておきます。

g++パッケージをインストールするコマンド
$ sudo apt install g++
pkg-configパッケージをインストールするコマンド
$ sudo apt install pkg-config

これで必要なコマンドは揃ったはずです。もう一度makeしてみましょう。

sample-gtkmmをビルドする(2回目)
$ make 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 g++ -c -o obj/MyWindow.o src/MyWindow.cpp In file included from src/MyWindow.cpp:1:0: src/MyWindow.h:4:10: fatal error: gtkmm.h: No such file or directory #include <gtkmm.h> ^~~~~~~~~ compilation terminated. Makefile:26: recipe for target 'obj/MyWindow.o' failed make: *** [obj/MyWindow.o] Error 1

コマンドだけでなくgtkmm-3.0などのライブラリも不足していましたね。

必要なライブラリをインストールする

不足しているgtkmm-3.0パッケージをインストールしていきましょう。

gtkmm-3.0パッケージをインストールするコマンド
$ sudo apt install gtkmm-3.0

様々な依存ライブラリが一緒にインストールされるので少し時間がかかります。ゆっくりと待ちましょう。

ビルド

これでコマンドもライブラリも揃いました。今度こそビルドが成功するはずです。

sample-gtkmmをビルドする(3回目)
$ make

エラーが表示されることなく終了すればビルド成功です。

実行ファイルが出来上がったことを確認する
$ ls -l bin total 48 -rwxr-xr-x 1 user user 47568 Feb 8 03:27 sample-gtkmm

ちゃんとbin/sample-gtkmmファイルが出来上がっています。

実行

それでは実行です。

sample-gtkmmを実行する
$ bin/sample-gtkmm &

上手くいきましたね。Windows上のEclipse CDTで開発を進めてきたGTK+アプリケーションを、何も変更することなく、そのままLinuxでビルドして実行することができました。