[クロス本草稿]GTK2アプリケーション開発環境


本文章は、技術書典5にて[project daisy bell]( https://twitter.com/MNukazawa )がリリースする予定の、クロスプラットホーム・デスクトップアプリケーション・GUIフレームワーク・クロスレビュー本(仮)(以下、クロス本)の一部の草稿です。
クロス本は、筆者のGTK/Qt/Electronの経験と知見について扱います。具体的な解説書というより技術エッセイです。
本文章には、校正前の文章・記憶により記述し未確認の内容・雑なmarkdown風紀法・張ってないURLリンク、などがあります。




# GTK2アプリケーション開発環境

GTK2アプリケーション開発をするために一番最初にしなければならないのは、開発環境の構築だった。
GTK2アプリケーション開発の前、VisualStudioとEclipseの経験があった。
Windowsで開発環境といえばどちらもインストーラを叩くだけでコンパイラもライブラリも全て揃い、ボタンを押せばビルドと実行がされる環境で開発が始められる。
Linux環境でGTK開発を始めるにあたって、ボタン押下をmakeコマンドに置き換えるところからスタートした。

この頃の成果はWindowsでのGTK2開発環境としてgithubに上げてあるので、本章の副読本として参照のこと。
[MichinariNukazawa/GTK2.0-Dev-Env]( https://github.com/MichinariNukazawa/GTK2.0-Dev-Env )

UbuntuターミナルでのGTKアプリケーションからWindows版開発環境は、実際に作業をする際にも、Linux環境のパスなどを参考にできた。
段階的にレベルが上がり、良いステップアップになったと思う。

当時興味をひいたものとして`pkg-config`コマンドがある。
[Wikipedia pkg-config]( https://ja.wikipedia.org/wiki/Pkg-config )
gccは、デフォルトのパスと環境変数から、ビルドに必要なライブラリとヘッダを探す。
Ubuntu上でGTKアプリケーションをビルドする場合、パスの探索先などを追加するオプションをgccに渡す必要がある(-L,-I,-lオプションのこと)。
pkg-configは、ライブラリ名を指定すると、ビルドに必要なgccオプション文字列を展開して返す。
Ubuntu環境で、設定済みのpkg-configにgtkライブラリを指定すれば、勝手に.pcファイルの読み出しからコマンド引数の展開まで勝手にやってくれる。
デフォルトのパスとPKG_CONFIG_PATH環境変数から、指定されたライブラリ名と同名の`*.pc`ファイルを探す。.pcファイルにgccに渡すオプションの情報が書かれており、ライブラリ配布者が用意してライブラリと共に配布する。
.pcファイルのrequireパラメタで依存関係を別の.pcファイルにネスト可能。試したことはないので参照を循環させたらどうなるのか不明。
筆者は.pcファイル自体を作ったことはないが、多分何かのautotools付属物で生成できるのではないかと思う。
pkg-configは最初から入っているか、build-essensialsかlibgtk2-devで導入されるらしく、Ubuntuターミナルだけで開発していた頃は存在を特に意識せずに使用していた。

後年、GTKライブラリを使おうとした際に付属の.pcファイルがフルパスで書かれていて相対パスに置換する必要があり、この頃の知識が役に立った。

Linux環境でしばらくGTKアプリケーションを書いてみてから、移植というほどではないが、WindowsでのGTKアプリケーションのビルドに挑戦した。
Ubuntuで作ったMakefileやソースとプロジェクトをそのまま使うことを意図し、MinGWと公式配布のビルド済みGTKライブラリを使った。
pkg-config.exeがGTKライブラリに添付されているのを見て、自分が使っていたLinuxコマンドというものの実体を理解した。
Ubuntuでは設定済みであったため理解の曖昧だった環境変数(PATHなど)もWindows環境では自分で設定する必要があった。
結果的に、アプリケーション自体はぱっとした成果物を生み出せなかったが、ターミナル環境への理解が進み、その後の開発に繋がっていった。

Windows環境でコマンドプロンプトを起動するのに使っている`!cons.bat`は「30日でできる自作OS入門」で得た知識を元にしている。
プロジェクトディレクトリの中で直接コマンドプロンプトを起動できるため、コマンドプロンプトで面倒なcdを省ける。
また、バッチ側で環境変数をセットしてコマンドプロンプトを起動できる。
現在でもWindowsで開発するプロジェクトではよく使っている。

Windows環境でテキストエディタにTeraTermを使っていたのも、確か「30日本」の影響だったと思う。こちらは最近VSCodeに乗り換えた。


技術書典5「クロス本」売り上げ報告ほか

この記事は 技術同人誌 その2 Advent Calendar 2018 Advent Calendar 2018 の17日の記事です。 #技術書典 daisy bell #技術書典5 | 一般 当落状況:当選(き08) 16:00 時点で、事実上の完売というこ...