外部コマンド

ソフトウェア構成の一部として、外部コマンドを実行して追加データを収集することができます。基本的な構文は以下の通りです。

r = run_command('command', 'arg1', 'arg2', 'arg3', check: true)
output = r.stdout().strip()
errortxt = r.stderr().strip()

check: true が指定されている場合、command がゼロ以外の終了コードで返されると、meson はエラーを出力します。または、check: false を設定し、r.returncode() で終了コードを取得できます。

0.52.0以降、コマンド環境を辞書として渡すことができます

run_command('command', 'arg1', 'arg2', env: {'FOO': 'bar'}, check: true)

0.50.0以降、コマンドをenvオブジェクトとして渡すこともできます

env = environment()
env.set('FOO', 'bar')
run_command('command', 'arg1', 'arg2', env: env)

run_command 関数は、戻り値と、stdoutとstderrに出力されたテキストを照会できるオブジェクトを返します。strip メソッド呼び出しは、文字列から先行スペースと末尾スペースを除去するために使用されます。通常、コマンドラインプログラムからの出力は改行で終了しますが、これは文字列変数では不要です。最初の引数は、文字列または以前に find_program で検出した実行可能ファイルのいずれかです。

Meson は、WindowsとUnixの両方で、shebang行を持つスクリプトを自動検出し、その中に指定された実行可能ファイル/インタプリタで実行します。

コマンドラインを単一の文字列として渡すことはできないことに注意してください。つまり、run_command('do_something foo bar') を呼び出すことは機能しません。文字列を別々の引数に分割するか、分割されたコマンドを配列として渡す必要があります。また、Mesonはコマンドをシェルに渡さないので、環境変数、バッククォート、パイプラインなどの機能を使用するコマンドラインは機能しないことに注意する必要があります。シェルセマンティクスが必要な場合は、コマンドをスクリプトファイルに書き込み、run_command で呼び出します。

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