インストール
以下のコマンドで呼び出されます (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_ROOT
とMESON_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
が指定されている場合、タグのいずれかでタグ付けされたファイルのみがインストールされます。
これは、通常libfoo
、libfoo-dev
、libfoo-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
を追加することをお勧めします。
検索結果は次のとおりです。