クロスおよびネイティブファイル参照

クロスファイルとネイティブファイルはほぼ同一ですが、完全に同じではありません。これは、両方で使用される共通値に関するドキュメントです。一方または両方の特定の値については、クロスコンパイルネイティブ環境を参照してください。

0.56.0で変更 セクション内のキーは大文字と小文字が区別されるようになりました。これは、プロジェクトオプションを正しく機能させるために必要です。

データ型

マシンファイルには4つの基本的なデータ型があります。

  • 文字列
  • 配列
  • ブール値
  • 整数

文字列は、シングルクォートで指定します。

[section]
option1 = 'false'
option2 = '2'

配列は角括弧で囲まれ、文字列またはブール値で構成する必要があります。

[section]
option = ['value']

ブール値はtrueまたはfalseのいずれかで、引用符は不要です。

option = false

整数は、引用符なしの数値定数である必要があります。

option = 42

セクション

次のセクションが許可されています。

  • 定数
  • バイナリ
  • パス
  • プロパティ
  • cmake
  • プロジェクトオプション
  • 組み込みオプション

定数

0.56.0以降

文字列とリストの連結は+演算子を使用してサポートされ、パスの結合は/演算子を使用してサポートされます。[constants]セクションで定義されたエントリは他のセクションで使用できます(常に最初に解析されます)。他のセクションのエントリはそのセクション内でのみ、定義後にのみ使用できます。

[constants]
toolchain = '/toolchain'
common_flags = ['--sysroot=' + toolchain / 'sysroot']

[properties]
c_args = common_flags + ['-DSOMETHING']
cpp_args = c_args + ['-DSOMETHING_ELSE']

[binaries]
c = toolchain / 'gcc'

これはクロスファイルの構成にも役立ちます。汎用的なクロスファイルは、定数が定義されているプラットフォーム固有のファイルで構成できます。

# aarch64.ini
[constants]
arch = 'aarch64-linux-gnu'
# cross.ini
[binaries]
c = arch + '-gcc'
cpp = arch + '-g++'
strip = arch + '-strip'
pkg-config = arch + '-pkg-config'
...

これはmeson setup --cross-file aarch64.ini --cross-file cross.ini builddirとして使用できます。

ファイルの構成は値の解析の前に行われることに注意してください。以下の例では、b'HelloWorld'になります。

# file1.ini:
[constants]
a = 'Foo'
b = a + 'World'
#file2.ini:
[constants]
a = 'Hello'

以下の例では、baの前に定義されるため、file1.iniがfile2.iniの前に含まれているとエラーになります。

# file1.ini:
[constants]
b = a + 'World'
#file2.ini:
[constants]
a = 'Hello'

1.3.0以降 マシンファイルの解析前に、いくつかのトークンが置換されます。

  • @GLOBAL_SOURCE_ROOT@:プロジェクトのソースツリーへの絶対パス。
  • @DIRNAME@:マシンファイルの親ディレクトリへの絶対パス。

たとえば、ソースディレクトリまたはツールチェーンのインストールディレクトリに対する相対パスを持つために使用できます。

[binaries]
c = '@DIRNAME@/toolchain/gcc'
exe_wrapper = '@GLOBAL_SOURCE_ROOT@' / 'build-aux' / 'my-exe-wrapper.sh'

バイナリ

バイナリセクションには、バイナリのリストが含まれています。これらはMeson内部またはfind_program関数によって使用できます。

これらの値は、文字列または文字列の配列である必要があります。

コンパイラとリンカは、<lang><lang>_ldを使用してここで定義されます。<lang>_ldは、コンパイラ固有であるため特別です。リンカを呼び出すために使用されるgccやclangなどのコンパイラでは、これは「リンカを選択する」引数(この場合は-fuse-ld=)に渡す値です。MSVCやClang-Clなどのコンパイラでは、これはMesonが呼び出すリンカへのパスです(例:link.exeまたはlld-link.exe)。ldのサポートは0.53.0の新機能です。

0.53.1で変更 多くのプロジェクトで問題が発生したため、ld変数は<lang>_ldに置き換えられました。0.53.0ではld変数が使用されました。

ネイティブの例

c = '/usr/bin/clang'
c_ld = 'lld'
sed = 'C:\\program files\\gnu\\sed.exe'
llvm-config = '/usr/lib/llvm8/bin/llvm-config'

クロスの例

c = ['ccache', '/usr/bin/i586-mingw32msvc-gcc']
cpp = ['ccache', '/usr/bin/i586-mingw32msvc-g++']
c_ld = 'gold'
cpp_ld = 'gold'
ar = '/usr/i586-mingw32msvc/bin/ar'
strip = '/usr/i586-mingw32msvc/bin/strip'
pkg-config = '/usr/bin/i586-mingw32msvc-pkg-config'

ここでオーバーライドできる内部で使用されるプログラムの不完全なリストは次のとおりです。

  • cmake
  • cups-config
  • gnustep-config
  • gpgme-config
  • libgcrypt-config
  • libwmf-config
  • llvm-config
  • pcap-config
  • pkg-config
  • sdl2-config
  • wx-config(またはwx-3.0-configまたはwx-config-gtk)

パスとディレクトリ

0.56.0で非推奨 代わりに組み込みセクションを使用してください。

0.50.0以降、libdirなどのパスとディレクトリは、pathsセクションのネイティブファイルとクロスファイルで定義できます。これらは文字列である必要があります。

[paths]
libdir = 'mylibdir'
prefix = '/my prefix'

これらの値は、クロスコンパイルしていない場合にのみ読み込まれます。コマンドラインの引数は、ネイティブファイルのオプションよりも優先されます。たとえば、--libdir=otherlibdirを渡すと、プレフィックスは/my prefixになり、libdirはotherlibdirになります。

プロパティ

0.54.0のネイティブファイルで新機能、クロスファイルでは常に使用されます。

クロスファイルで指定できる特別なデータに加えて、このセクションには、meson.get_external_property()またはmeson.get_cross_property()を使用してアクセスできるランダムなキーバリューペアを含めることができます。

0.56.0で変更 <lang>_args<lang>_link_argsをプロパティセクションに配置することは非推奨になり、組み込みオプションセクションに配置する必要があります。

サポートされているプロパティ

これは、[properties]セクションでサポートされている変数の網羅的ではないリストです。

  • cmake_toolchain_fileは、既に存在するCMakeツールチェーンファイルへの絶対パスを指定します。これは、Mesonから自動的に生成されたCMakeツールチェーンファイルの最後の命令としてinclude()を使用してロードされます。(0.56.0の新機能
  • cmake_defaultsは、Mesonがマシンファイルの他のセクション(binarieshost_machineなど)からデフォルトのツールチェーン変数を自動的に生成するかどうかを指定するブール値です。デフォルトは、[cmake]セクションで設定された変数によって常に上書きされます。デフォルトはtrueです。(0.56.0の新機能
  • cmake_skip_compiler_testは、MesonがCMakeコンパイラの健全性チェックをスキップするためのツールチェーン変数を自動的に生成する場合を指定する列挙型です。これは、cmake_defaultstrueの場合にのみ有効です。サポートされている値はalwaysneverdep_onlyです。デフォルトはdep_onlyです。(0.56.0の新機能
  • cmake_use_exe_wrapperは、[binaries]で指定されたexe_wrapperを使用してCMakeサブプロジェクトで生成された実行可能ファイルを実行するかどうかを制御するブール値です。この設定は、exe_wrapperが指定されていない場合は効果がありません。デフォルト値はtrueです。(0.56.0の新機能
  • java_homeは、Javaインストールのルートを指す絶対パスです。
  • bindgen_clang_argumentsは、bindgenを呼び出すときにclangに渡す追加引数の配列です。

CMake変数

0.56.0の新機能

[cmake]セクションで設定されたすべての変数は、CMake依存関係とCMakeサブプロジェクトの両方で使用される生成されたCMakeツールチェーンファイルに追加されます。各エントリの型は、文字列または文字列のリストのいずれかである必要があります。

注:すべてのキーの値内の\のすべての出現は/に置き換えられます。これは、CMakeが変数を扱う際に\を正しくエスケープすることに多くの問題があるためです(CMAKE_C_COMPILERのパスが正しくエスケープされている場合でも、CMakeは内部的に問題が発生します)。

      A custom toolchain file should be used (via the `cmake_toolchain_file`
      property) if `\` support is required.
[cmake]

CMAKE_C_COMPILER    = '/usr/bin/gcc'
CMAKE_CXX_COMPILER  = 'C:\\usr\\bin\\g++'
CMAKE_SOME_VARIABLE = ['some', 'value with spaces']

たとえば、上記の[cmake]セクションは、CMakeツールチェーンファイルに次のコードを生成します。

set(CMAKE_C_COMPILER    "/usr/bin/gcc")
set(CMAKE_CXX_COMPILER  "C:/usr/bin/g++")
set(CMAKE_SOME_VARIABLE "some" "value with spaces")

プロジェクト固有のオプション

0.56.0の新機能

パスオプションは許可されていません。それらは[paths]セクションで設定する必要があります。

クロスファイルまたはネイティブファイルでプロジェクト固有のオプションを設定できるのは、特定のファイルの[project options]セクションを使用することです(クロスビルドを行う場合、ネイティブファイルのオプションは無視されます)。

サブプロジェクトでオプションを設定するには、代わりに[<subproject>:project options]セクションを使用します。

[project options]
build-tests = true

[zlib:project options]
build-tests = false

Meson組み込みオプション

0.56.0より前は、<lang>_args<lang>_link_argspropertiesセクションに配置する必要があります。そうでない場合は無視されます。

Meson組み込みオプションは同じ方法で設定できます。

[built-in options]
c_std = 'c99'

一部のMeson組み込みオプションは、default_librarywerrorなど、サブプロジェクトごとに設定できます。優先順位は次のとおりです。

  1. コマンドライン
  2. マシンファイル
  3. ビルドシステム定義
[zlib:built-in options]
default_library = 'static'
werror = false

サブプロジェクトごとに設定されたオプションは、親が設定を持っているがサブプロジェクトが設定を持っていない場合、Meson言語にデフォルトが設定されている場合でも、親からオプションを継承します。

[built-in options]
default_library = 'static'

サブプロジェクトでdefault_libraryを静的として使用します。

一部のオプションはマシンごとに設定できます(つまり、クロスコンパイルではビルドマシンの値とホストマシンの値が異なる場合があります)。これらの場合、クロスファイルとネイティブファイルの両方の値が使用されます。

オプションの不完全なリストは次のとおりです。

  • pkg_config_path
  • cmake_prefix_path

複数のマシンファイルの読み込み

ネイティブファイルではレイヤリングが可能です(クロスファイルはMeson 0.52.0以降レイヤリングできます)。複数のファイルをロードでき、前のファイルの値は次のファイルによって上書きされます。これは上書きするためではなく、ファイルを構成できるようにするためです。この構成は、コマンドライン引数を複数回渡すことによって行われます。

meson setup builddir/ --cross-file first.ini --cross-file second.ini --cross-file third.ini

この場合、first.iniがロードされ、次にsecond.iniがロードされ、second.iniの値がfirst.iniを置き換えます。以降も同様です。

たとえば、CとC++、python 3.4-3.7、LLVM 5-7を使用するプロジェクトがあり、clang 5、6、7とgcc 5.x、6.x、7.xを使用してビルドする必要がある場合、これらすべての構成をモノリシックな構成で表現すると、81個もの異なるネイティブファイルが生成されます。レイヤリングすることで、わずか12個のネイティブファイルで表現できます。

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