インストール

以下のコマンドで呼び出されます (0.47.0以降で使用可能)

meson install

または、(古いMesonバージョンでninjaバックエンドを使用している場合は)

ninja install

デフォルトでは、Mesonは何のインストールも行いません。ビルドターゲットは、定義でインストール可能としてタグ付けすることでインストールできます。

project('install', 'c')
shared_library('mylib', 'libfile.c', install : true)

通常、インストールパスなどを指定する必要はありません。Mesonは自動的に標準に準拠した場所にインストールします。この特定のケースでは、実行ファイルはインストールプレフィックスのbinサブディレクトリにインストールされます。ただし、インストールディレクトリをオーバーライドしたい場合は、install_dir引数を使用して行うことができます。

executable('prog', 'prog.c', install : true, install_dir : 'my/special/dir')

その他のインストールコマンドは以下のとおりです。

install_headers('header.h', subdir : 'projname') # -> include/projname/header.h
install_man('foo.1') # -> share/man/man1/foo.1
install_data('datafile.dat', install_dir : get_option('datadir') / 'progname')
# -> share/progname/datafile.dat

install_data()は、0.46.0以降、ファイルの名前変更をサポートしています。

# file.txt -> {datadir}/{projectname}/new-name.txt
install_data('file.txt', rename : 'new-name.txt')

# file1.txt -> share/myapp/dir1/data.txt
# file2.txt -> share/myapp/dir2/data.txt
install_data(['file1.txt', 'file2.txt'],
             rename : ['dir1/data.txt', 'dir2/data.txt'],
             install_dir : 'share/myapp')

サブツリー全体を直接コピーしたい場合があります。このユースケースのために、install_subdirコマンドがあります。これは次のように使用できます。

install_subdir('mydir', install_dir : 'include') # mydir subtree -> include/mydir

ほとんどの場合、インストールプレフィックスを基準としたファイルをインストールします。プレフィックスの外に出る必要がある場合があります(/usr/etcではなく/etcにファイルを書き込むなど)。これは、絶対インストールパスを指定することで実現できます。

install_data(sources : 'foo.dat', install_dir : '/etc') # -> /etc/foo.dat

カスタムインストールスクリプト

基本的なターゲットをインストールする以上のことをする必要がある場合があります。Mesonでは、インストール時に実行するカスタムスクリプトを指定することで、これを簡単に行うことができます。例として、カスタムディレクトリに空のファイルを生成するスクリプトを次に示します。

#!/bin/sh

mkdir "${DESTDIR}/${MESON_INSTALL_PREFIX}/mydir"
touch "${DESTDIR}/${MESON_INSTALL_PREFIX}/mydir/file.dat"

ご覧のとおり、Mesonはスクリプトの作成に役立つ環境変数を設定します(DESTDIRはMesonによって設定されず、外部環境から継承されます)。インストールプレフィックスに加えて、Mesonは変数MESON_SOURCE_ROOTMESON_BUILD_ROOTも設定します。

インストール時にこのスクリプトを実行するようにMesonに指示するのは、1行で済みます。

meson.add_install_script('myscript.sh')

引数は、現在のサブディレクトリを基準としたスクリプトファイルの名前です。

スーパーユーザーとしてのインストール

ルート以外のユーザーとしてビルドする場合でも、たとえばsudo ninja installを使用してルートが所有する場所にインストールする場合、ninjaは期限切れのターゲットをルートとして再ビルドしようとします。これは、ビルド出力とninjaの内部ファイルがルートによって所有されているため、さまざまな悪い動作を引き起こします。

meson installの実行は、いくつかの理由で推奨されます。期限切れのターゲットを再構築し、ルートとして自身を再起動できます。 (1.1.0以降) また、sudo meson installを実行すると、権限が削除され、期限切れのターゲットがルートとしてではなく、元のユーザーとして再ビルドされます。

(1.1.0以降) ルートとして再起動すると、ルートとしてコマンドを再実行するためのユーザーの推奨方法を推測しようとします。優先順位は、sudo、doas、pkexec(polkit)です。 $MESON_ROOT_CMDを設定することで、昇格ツールを強制できます。

DESTDIRのサポート

インストールプレフィックスとは異なるディレクトリにインストールする必要がある場合があります。これは、rpmまたはdebパッケージをビルドする場合に最も一般的です。これはDESTDIR環境変数を使用して行われ、他のビルドシステムと同様に使用されます

$ DESTDIR=/path/to/staging/area meson install

0.57.0以降、環境の代わりに--destdir引数を使用できます。その場合、Mesonはインストールスクリプトを実行するときに環境にDESTDIRを設定します。

0.60.0以降DESTDIR--destdirはビルドディレクトリを基準としたパスにすることができます。スクリプトを実行するときに、絶対パスが環境に設定されます。

カスタムインストール動作

インストールの動作は、追加の引数を使用してさらにカスタマイズできます。

たとえば、コードを再構築せずに(デフォルトのインストールターゲットは常に再構築します)、変更されたファイルのみをインストールして現在のセットアップをインストールする場合は、ビルドツリーで次のコマンドを実行します

$ meson install --no-rebuild --only-changed

インストールタグ

0.60.0以降

meson install --tags tag1,tag2コマンドラインを使用して、インストール可能なファイルのサブセットのみをインストールできます。 --tagsが指定されている場合、タグのいずれかでタグ付けされたファイルのみがインストールされます。

これは、通常libfoolibfoo-devlibfoo-docパッケージを分割する必要があるパッケージャー(例:ディストリビューション)が使用することを目的としています。各パッケージングシステムでカテゴリごとにインストール済みファイルのリストを複製する代わりに、アップストリームのmeson.buildファイルで1か所で管理できます。

Mesonは、一部のファイルに事前定義されたタグを設定します。時間の経過とともにさらに多くのタグが追加される可能性があります。既知のカテゴリのリストの拡張にご協力ください。

  • devel:
    • static_library(),
    • install_headers(),
    • pkgconfig.generate(),
    • gnome.generate_gir() - .gir ファイル,
    • gnome.generate_vapi() - .vapi ファイル (0.64.0以降),
    • libdirにインストールされ、.aまたは.pc拡張子を持つファイル,
    • includedirにインストールされたファイル,
    • gnome.compile_resources()gnome.genmarshal()gnome.mkenums()gnome.mkenums_simple()gnome.gdbus_codegen()でインストールされた生成されたヘッダーファイル (0.64.0以降)。
  • runtime:
    • executable(),
    • shared_library(),
    • shared_module(),
    • jar(),
    • gnome.compile_resources() - .gresource ファイル (0.64.0以降),
    • bindirにインストールされたファイル,
    • libdirにインストールされ、.soまたは.dll拡張子を持つファイル。
  • python-runtime:
    • python.install_sources().
  • man:
  • doc:
    • gnome.gtkdoc(),
    • gnome.yelp(),
    • hotdoc.generate_doc().
  • i18n:
    • i18n.gettext(),
    • qt.compile_translations(),
    • localedirにインストールされたファイル。
  • typelib:
    • gnome.generate_gir() - .typelib ファイル。
  • bin:
    • エンドユーザーが使用することを目的とした、ライブラリにバンドルされているスクリプトと実行可能ファイル。
  • bin-devel:
    • 開発者(つまり、ビルドツール)が使用することを目的とした、ライブラリにバンドルされているスクリプトと実行可能ファイル。
  • tests:
    • installed-tests サブディレクトリにインストールされたファイル (0.64.0以降)。
  • systemtap:
    • systemtap サブディレクトリにインストールされたファイル (0.64.0以降)。

カスタムインストールタグは、custom_target()configure_file()install_subdir()install_data()などのさまざまな関数でinstall_tagキーワード引数を使用して設定できます。詳細は、リファレンスマニュアルのそれぞれのドキュメントを参照してください。可能な場合は、上記の定義済みタグのいずれかを使用することをお勧めします。

Mesonによって自動的に、またはinstall_tagキーワード引数を使用して手動でタグ付けされていないインストール可能なファイルは、--tagsが使用されている場合はインストールされません。 それらは<builddir>/meson-logs/meson-log.txtの最後に報告されます。インストール可能なファイルごとにタグを付けるために、不足しているinstall_tagを追加することをお勧めします。

検索結果は次のとおりです。