Vala は GObject を利用した C 言語のソースコードを生成する、セルフホスティングコンパイラを持つオブジェクト指向言語です。C# に似た構文を持ち、無名関数やシグナル、プロパティ、ジェネリクス、メモリ管理、例外処理、型推論、および、for-each など、C 言語にはない言語仕様を持っています。
Vala を試してみて、簡単に GObject の GUI が作れることに興味を持ちました [1]。そこで開発環境を探したところ GNOME Builder が Vala のプロジェクトに対応していることが判りました [2]。しかし使い方がよくわからず、どうもとっつきにくい印象を受けます。GNOME Builder のマニュアルは英語ですが整備されているので、根気良く読めば良いのですが、試しに作ったプロジェクトで生成された meson.build ファイルが気になります。
この meson.build は Meson (/ˈmɛ.sɒn/) というビルド自動化するツールのためのファイルです。この Mason を知れば、GNOME Builder を見る目が変わるかもしれないと思い、Vala のサンプルを Mason を使ってビルドしてみました。
本ブログ記事では下記の OS 環境で動作確認をしています。
Fedora 32 (Workstation Edition) | x86_64 | |
meson-0.54.2-1.fc32.noarch | ||
ninja-build-1.10.0-1.fc32.x86_64 |
Hello World!
参考サイト [1] で紹介した Hello World! のプログラムを今回も使うことにします。
using Gtk; int main (string[] args) { Gtk.init (ref args); var window = new Window (); window.title = "Hello, World!"; window.border_width = 10; window.window_position = WindowPosition.CENTER; window.set_default_size(350, 70); window.destroy.connect (Gtk.main_quit); var label = new Label ("こんにちは、世界!"); window.add (label); window.show_all (); Gtk.main (); return 0; }
はじめての Meson
Wikipedia によると Meson は直接ソフトウェアをビルドするのではなく、Linux では Ninja のような低レベルなビルドシステム用のビルドファイルを生成するということです。Ninja も使ったことがないのですが、とりあえず簡単なサンプルで Meson を使ってみることにします。
Meson のプロジェクトサイト [3] のマニュアルに Vala 用のサンプルもありましたので、それを参考に、前述の hellogtk.vala をビルドできるように meson.build を hellogtk.vala と同じディレクトリ内に作成しました。ソースが hellogtk.vala で、ビルドする実行ファイル名を hello としています。
project('vala sample', 'vala', 'c') dependencies = [ dependency('glib-2.0'), dependency('gobject-2.0'), dependency('gtk+-3.0'), ] sources = files('hellogtk.vala') executable('hello', sources, dependencies: dependencies)
hellogtk.vala をビルドするディレクトリを builddir として Meson を実行します。
[bitwalk@fedora-pc hellogtk]$ ls hellogtk.vala meson.build [bitwalk@fedora-pc hellogtk]$ meson builddir The Meson build system Version: 0.54.2 Source dir: /home/bitwalk/プロジェクト/hellogtk Build dir: /home/bitwalk/プロジェクト/hellogtk/builddir Build type: native build Project name: vala sample Project version: undefined C compiler for the host machine: ccache cc (gcc 10.1.1 "cc (GCC) 10.1.1 20200507 (Red Hat 10.1.1-1)") C linker for the host machine: cc ld.bfd 2.34-3 Vala compiler for the host machine: valac (valac 0.48.6) Host machine cpu family: x86_64 Host machine cpu: x86_64 Found pkg-config: /usr/bin/pkg-config (1.6.3) Run-time dependency glib-2.0 found: YES 2.64.3 Run-time dependency gobject-2.0 found: YES 2.64.3 Run-time dependency gtk+-3.0 found: YES 3.24.20 Build targets in project: 1 Found ninja-1.10.0 at /usr/bin/ninja [bitwalk@fedora-pc hellogtk]$ ls builddir hellogtk.vala meson.build [bitwalk@fedora-pc hellogtk]$
builddir 内にディレクトリを移して ninja コマンドを実行すると hello がビルドされます。
[bitwalk@fedora-pc hellogtk]$ cd builddir [bitwalk@fedora-pc builddir]$ ls build.ninja compile_commands.json meson-info meson-logs meson-private [bitwalk@fedora-pc builddir]$ ninja [3/3] Linking target hello [bitwalk@fedora-pc builddir]$ ls build.ninja compile_commands.json hello hello@exe meson-info meson-logs meson-private [bitwalk@fedora-pc builddir]$ ./hello
とてもシンプルな例をビルドしただけですが、現金なもので、これだけのでも Meson への親近感が増し、ひいては GNOME Builder の meson.build に記載されている内容を理解できる気にもなります。この錯覚が GNOME Builder を使えるようにするためにはきっと必要なのでしょう。🤗
参考サイト
- bitWalk's: Vala を試してみた [2020-06-06]
- bitWalk's: GNOME Builder は GNOME アプリ開発用の IDE [2020-06-08]
- The Meson Build system
にほんブログ村
0 件のコメント:
コメントを投稿