依存関係
ごくわずかなアプリケーションを除き、ほとんどのアプリケーションは完全に自己完結しているわけではなく、外部ライブラリやフレームワークを利用して動作しています。Mesonを使用すると、外部依存関係を簡単に見つけて使用できます。以下は、zlib圧縮ライブラリを使用する方法です。
zdep = dependency('zlib', version : '>=1.2.8')
exe = executable('zlibprog', 'prog.c', dependencies : zdep)
まず、Mesonに外部ライブラリzlib
を検索するように指示し、見つからない場合はエラーを出力します。version
キーワードはオプションで、依存関係のバージョン要件を指定します。次に、指定された依存関係を使用して実行可能ファイルがビルドされます。ユーザーがコンパイラフラグやリンカフラグを手動で処理したり、その他の細かいことに対応したりする必要がないことに注意してください。
複数の依存関係がある場合は、それらを配列として渡します
executable('manydeps', 'file.c', dependencies : [dep1, dep2, dep3, dep4])
依存関係がオプションの場合、依存関係が見つからない場合にMesonがエラーを出力しないように指示し、さらに構成を行うことができます。
opt_dep = dependency('somedep', required : false)
if opt_dep.found()
# Do something.
else
# Do something else.
endif
実際の依存関係が見つかったかどうかに関係なく、ターゲット構築関数にopt_dep
変数を渡すことができます。Mesonは、見つからなかった依存関係を無視します。
Mesonでは、pkg-config
ファイルで定義されている変数も取得できます。これは、dep.get_pkgconfig_variable()
関数を使用することで可能です。
zdep_prefix = zdep.get_pkgconfig_variable('prefix')
これらの変数は、define_variable
パラメーターを渡すことによって再定義することもできます。これは、特定の状況で役立つ場合があります
zdep_prefix = zdep.get_pkgconfig_variable('libdir', define_variable: ['prefix', '/tmp'])
依存関係検出器は、pkg-config
ファイルを提供するすべてのライブラリで動作します。残念ながら、いくつかのパッケージはpkg-configファイルを提供していません。Mesonには、これらのいくつかに対する自動検出サポートがあり、それらはこのページの後半で説明されています。
複数の方法で見つけることができる依存関係からの任意の変数
注 0.51.0の新機能 0.54.0の新機能、internal
キーワード
複数の方法で見つけることができる依存関係から任意の変数を取り出す必要があり、型を制約したくない場合は、汎用のget_variable
メソッドを使用できます。現在、これはcmake、pkg-config、およびconfig-toolベースの変数をサポートしています。
foo_dep = dependency('foo')
var = foo_dep.get_variable(cmake : 'CMAKE_VAR', pkgconfig : 'pkg-config-var', configtool : 'get-var', default_value : 'default')
これは、「cmake」、「pkgconfig」、「pkgconfig_define」、「configtool」、「internal」、「system」、および「default_value」のキーワードを受け入れます。「pkgconfig_define」は、get_pkgconfig_variable
の「define_variable」引数とまったく同じように機能します。このメソッドが呼び出されると、依存関係の基礎となる型に対応するキーワードが変数検索に使用されます。その変数が見つからない場合、または呼び出し元が依存関係の型の引数を指定しない場合は、次のいずれかが発生します。「default_value」が指定されている場合はその値が返され、「default_value」が指定されていない場合はエラーが発生します。
リソースファイルを提供する依存関係
依存関係によっては、他のプロジェクトが使用する必要があるインストール可能なファイルを提供することがあります。たとえば、wayland-protocols XMLファイルなどです。
foo_dep = dependency('foo')
foo_datadir = foo_dep.get_variable('pkgdatadir')
custom_target(
'foo-generated.c',
input: foo_datadir / 'prototype.xml',
output: 'foo-generated.c',
command: [generator, '@INPUT@', '@OUTPUT@']
)
0.63.0以降、これらは、(適切に作成された)内部依存関係からの場合でも、期待どおりに機能します。これは、取得するファイルをシステム依存関係と交換可能として扱う場合にのみ機能します。たとえば、公開ファイルのみを使用でき、依存関係が指すディレクトリを離れることは許可されていません。
独自の依存関係の宣言
システムから取得した依存関係オブジェクトと互換性のある独自の依存関係オブジェクトを宣言できます。構文は簡単です
my_inc = include_directories(...)
my_lib = static_library(...)
my_dep = declare_dependency(link_with : my_lib,
include_directories : my_inc)
これは、指定されたインクルードディレクトリと静的ライブラリを、それを使用するすべてのターゲットに追加する依存関係を宣言します。
サブプロジェクトとしての依存関係の構築
多くのプラットフォームは、システムパッケージマネージャーを提供していません。これらのシステムでは、依存関係はソースからコンパイルする必要があります。Mesonのサブプロジェクトを使用すると、システム依存関係が利用可能な場合はシステム依存関係を使用し、利用できない場合は依存関係を手動でビルドするのが簡単になります。
これを機能させるには、依存関係にMesonビルド定義があり、次のように独自の依存関係を宣言する必要があります
foo_dep = declare_dependency(...)
次に、それを使用するプロジェクトは、メインのmeson.build
ファイルに次の宣言を記述できます。
foo_dep = dependency('foo', fallback : ['foo', 'foo_dep'])
この宣言の意味は、まずMesonがシステムから(pkg-configを使用するなどして)依存関係を検索しようとすることです。利用できない場合は、foo
という名前のサブプロジェクトをビルドし、そこから変数foo_dep
を抽出します。つまり、この関数の戻り値は、外部または内部の依存関係オブジェクトのいずれかです。これらは互換性があるため、残りのビルド定義では、どちらであるかを気にする必要はありません。Mesonがこの動作を可能にするために、舞台裏ですべての作業を行います。
依存関係検出方法
キーワードmethod
を使用して、依存関係を検索するときに使用するメソッドをMesonに通知できます。デフォルト値はauto
です。追加のメソッドはpkg-config
、config-tool
、cmake
、builtin
、system
、sysconfig
、qmake
、extraframework
、およびdub
です。
cups_dep = dependency('cups', method : 'pkg-config')
特定の検出ロジックがない依存関係の場合、auto
の依存関係メソッドの順序は次のとおりです。
pkg-config
cmake
-
extraframework
(OSXのみ)
システム
一部の依存関係は、検出に有効なメソッドを提供しないか、一部の場合にのみ提供します。この例としては、pkg-configとcmakeの両方を提供するZlibがあります。ただし、FreeBSDやmacOSのように、ベースOSイメージの一部である場合は例外です。OpenGLは、glvndまたはmesaからのUnicesではpkg-configがありますが、macOSとWindowsにはpkg-configがありません。
これらの場合、Mesonはsystem
依存関係の形式で便利なラッパーを提供します。内部的には、これらの依存関係は、ユーザーがビルドシステムDSLまたはスクリプトで実行するであろうこと、おそらくcompiler.find_library()
を呼び出し、link_with
とinclude_directories
を設定することを正確に行います。これらをMesonアップストリームに配置することで、それらを使用する障壁が低くなります。Mesonを使用するプロジェクトは、ロジックを再実装する必要がないためです。
組み込み
一部の依存関係は、言語によって内部的に提供されるため、一部のシステムでは検出に有効なメソッドを提供しません。この例の1つはintlです。これは、GNUまたはmusl libcに組み込まれていますが、それ以外の場合はsystem
依存関係として提供されます。
これらの場合、Mesonはsystem
依存関係の便利なラッパーを提供しますが、まず機能がデフォルトで使用可能かどうかを確認します。
CMake
Mesonは、CMake find_package()
関数を使用して、組み込みのFind<NAME>.cmake
モジュールとエクスポートされたプロジェクト構成(通常は/usr/lib/cmake
内)を持つ依存関係を検出できます。Mesonは、旧式の<NAME>_LIBRARIES
変数とインポートされたターゲットの両方を使用できます。
modules
プロパティで使用するCMakeターゲットのリストを手動で指定することもできます。ただし、Mesonは依存関係の名前に基づいて適切なターゲットを自動的に推測しようとするため、この手順はオプションです。
依存関係によっては、Mesonが自動的に推測できない場合に、modules
プロパティを使用してCMakeターゲットを明示的に指定する必要がある場合があります。
cmake_dep = dependency('ZLIB', method : 'cmake', modules : ['ZLIB::ZLIB'])
CMake find_package
ルックアップに追加のCOMPONENTS
を追加するためのサポートは、components
kwarg(0.54.0で導入)で提供されます。指定されたすべてのコンポーネントは、find_package(COMPONENTS)
に直接渡されます。
CMake find_package
を成功させるために特定のバージョンが必要なパッケージのサポートは、cmake_package_version
kwarg(0.57.0で導入)で提供されます。指定されたcmake_package_version
は、find_package
の2番目のパラメーターとして直接渡されます。
既存のFind<name>.cmake
ファイルをcmake_module_path
プロパティ(0.50.0以降)で再利用することも可能です。このプロパティを使用することは、CMakeでCMAKE_MODULE_PATH
変数を設定することと同等です。cmake_module_path
に指定されたパスはすべて、プロジェクトソースディレクトリからの相対パスである必要があります。CMakeファイルがプロジェクト自体に保存されていない場合にのみ、絶対パスを使用する必要があります。
追加のCMakeパラメーターは、cmake_args
プロパティ(0.50.0以降)で指定できます。
Dub
MesonはローカルDubリポジトリに存在する依存関係のみを検索できることに注意してください。ターゲットの依存関係を手動でフェッチしてビルドする必要があります。
urld
の場合。
dub fetch urld
dub build urld
その他、注意する必要があるのは、MesonとDubの両方が同じコンパイラを使用している必要があるということです。これは、Dubの-compiler
引数を使用するか、Mesonの実行時にDC
環境変数を手動で設定することで実現できます。
dub build urld --compiler=dmd
DC="dmd" meson setup builddir
Config tool
CUPS、LLVM、ObjFW、pcap、WxWidgets、libwmf、GCrypt、GPGME、およびGnuStepは、pkg-configモジュールを提供していないか、configツール(cups-config、llvm-config、libgcrypt-configなど)を介して追加で検出できます。Mesonにはこれらのツールに対するネイティブサポートがあり、他の依存関係と同様に見つけることができます
pcap_dep = dependency('pcap', version : '>=1.0')
cups_dep = dependency('cups', version : '>=1.4')
llvm_dep = dependency('llvm', version : '>=4.0')
libgcrypt_dep = dependency('libgcrypt', version: '>= 1.8')
gpgme_dep = dependency('gpgme', version: '>= 1.0')
objfw_dep = dependency('objfw', version: '>= 1.0')
0.55.0以降、クロスコンパイル時にconfigツールがクロスファイルにエントリがない場合、Mesonはconfigツールバイナリを$PATHで検索しなくなります。
カスタムルックアップ機能を持つ依存関係
一部の依存関係には、特定の検出ロジックがあります。
一般的な依存関係名は1で大文字と小文字が区別されますが、これらの依存関係名は、大文字と小文字を区別せずに一致します。推奨されるスタイルは、すべて小文字で記述することです。
場合によっては、複数の検出方法が存在し、method
キーワードを使用して使用する検出方法を選択できます。auto
メソッドは、Mesonが最適と考える順序でチェックメカニズムを使用します。
たとえば、libwmfとCUPSはpkg-configとconfig-toolの両方のサポートを提供します。method
キーワードを使用して、一方または他方を強制できます
cups_dep = dependency('cups', method : 'pkg-config')
wmf_dep = dependency('libwmf', method : 'config-tool')
AppleFrameworks
必要なフレームワークを一覧表示するには、modules
キーワードを使用します。例:
dep = dependency('appleframeworks', modules : 'foundation')
これらの依存関係は、OSX以外のホストでは見つかりません。
ブロック
Clang の blocks 拡張機能のサポートを有効にします。
dep = dependency('blocks')
(0.52.0 で追加)
Boost
Boost は単一の依存関係ではなく、異なるライブラリのグループです。Boost のヘッダーのみのライブラリを使用するには、単に Boost を依存関係として追加してください。
boost_dep = dependency('boost')
exe = executable('myprog', 'file.cc', dependencies : boost_dep)
Meson で Boost に対してリンクするには、使用したいライブラリをリストアップするだけです。
boost_dep = dependency('boost', modules : ['thread', 'utility'])
exe = executable('myprog', 'file.cc', dependencies : boost_dep)
dependency()
を異なるモジュールで複数回呼び出し、それらを使用してターゲットにリンクできます。
Boost のヘッダーまたはライブラリが標準以外の場所にある場合は、BOOST_ROOT
、または BOOST_INCLUDEDIR
および BOOST_LIBRARYDIR
環境変数を設定できます。(0.56.0 で追加) これらのパラメーターは、ネイティブまたはクロスコンパイルのマシンファイルで boost_root
、boost_includedir
、boost_librarydir
として設定することもできます。マシンファイルの変数は環境変数よりも優先され、これらのいずれかを指定すると、システム全体での Boost の検索が無効になることに注意してください。
引数 threading
を single
に設定すると、シングルスレッドで使用するためにコンパイルされた Boost ライブラリを使用できます。
CUDA
(0.53.0 で追加)
CUDA Toolkit に対してコンパイルおよびリンクを有効にします。version
および modules
キーワードを渡して、特定の CUDA Toolkit バージョンや、対応する追加の CUDA ライブラリの使用を要求できます。
dep = dependency('cuda', version : '>=10', modules : ['cublas'])
この依存関係を明示的に追加する必要があるのは、C/C++ ファイルまたはプロジェクトから CUDA Toolkit を使用している場合、または明示的にリンクする必要がある追加のツールキットライブラリを利用している場合のみであることに注意してください。システムのデフォルトパスで CUDA Toolkit が見つからない場合は、CUDA_PATH
を使用してパスを明示的に設定できます。
CUPS
method
は、auto
、config-tool
、pkg-config
、cmake
、または extraframework
のいずれかです。
Curses
(0.54.0 以降)
Curses (および ncurses) は、クロスプラットフォームで厄介なものです。Meson は、これらの依存関係を curses
依存関係にラップします。これは、ncurses
(推奨) とその他の curses 実装の両方をカバーします。
method
は、auto
、pkg-config
、config-tool
、または system
のいずれかです。
0.56.0 の新機能 config-tool
および system
メソッド。
curses autoconf ドキュメントで言及されているプリプロセッサシンボルのいくつかを定義するには
conf = configuration_data()
check_headers = [
['ncursesw/menu.h', 'HAVE_NCURSESW_MENU_H'],
['ncurses/menu.h', 'HAVE_NCURSES_MENU_H'],
['menu.h', 'HAVE_MENU_H'],
['ncursesw/curses.h', 'HAVE_NCURSESW_CURSES_H'],
['ncursesw.h', 'HAVE_NCURSESW_H'],
['ncurses/curses.h', 'HAVE_NCURSES_CURSES_H'],
['ncurses.h', 'HAVE_NCURSES_H'],
['curses.h', 'HAVE_CURSES_H'],
]
foreach h : check_headers
if compiler.has_header(h.get(0))
conf.set(h.get(1), 1)
endif
endforeach
dl (libdl)
(0.62.0 で追加)
動的リンクインターフェース (関数: dlopen、dlclose、dlsym など) へのアクセスを提供します。これが libc に組み込まれていないシステム (主に glibc < 2.34) では、代わりにそれらを提供する外部ライブラリを見つけようとします。
method
は、auto
、builtin
、または system
のいずれかです。
Fortran Coarrays
(0.50.0 で追加)
Coarray は Fortran 言語の組み込み機能であり、dependency('coarray')
によって有効になります。
GCC は、存在する場合は OpenCoarrays を使用して coarray を実装しますが、Intel と NAG は内部の coarray サポートを使用します。
GPGME
(0.51.0 で追加)
method
は、auto
、config-tool
、または pkg-config
のいずれかです。
GL
これは、プラットフォームに適した方法で OpenGL ライブラリを検索します。
method
は、auto
、pkg-config
、または system
のいずれかです。
GTest および GMock
GTest および GMock は、プロジェクトの一部としてコンパイルする必要があるソースとして提供されます。Meson では、詳細を気にする必要はありません。単に gtest
または gmock
を dependency
に渡すだけで、すべてが実行されます。GMock を使用する場合は、スタンドアロンで動作させるのが難しいので、GTest も使用することをお勧めします。
main
キーワード引数を true
に設定すると、GTest によって提供される main()
関数を使用できます。
gtest_dep = dependency('gtest', main : true, required : false)
e = executable('testprog', 'test.cc', dependencies : gtest_dep)
test('gtest test', e)
HDF5
(0.50.0 で追加)
HDF5 は C、C++、および Fortran でサポートされています。依存関係は言語固有であるため、language
キーワード引数を使用して、要求された言語を指定する必要があります。つまり、
-
C HDF5 ヘッダーとライブラリの場合は
dependency('hdf5', language: 'c')
-
C++ HDF5 ヘッダーとライブラリの場合は
dependency('hdf5', language: 'cpp')
-
Fortran HDF5 ヘッダーとライブラリの場合は
dependency('hdf5', language: 'fortran')
標準のローレベル HDF5 関数と、HL
ハイレベル HDF5 関数が各言語に対してリンクされます。
method
は、auto
、config-tool
、または pkg-config
のいずれかです。
0.56.0 の新機能 config-tool
メソッド。0.56.0 の新機能 依存関係は適切な依存関係型を返し、get_variable
および同様のメソッドは期待どおりに動作するようになりました。
iconv
(0.60.0 で追加)
iconv
ファミリの C 関数へのアクセスを提供します。これが libc に組み込まれていないシステムでは、代わりにそれらを提供する外部ライブラリを見つけようとします。
method
は、auto
、builtin
、または system
のいずれかです。
intl
(0.59.0 で追加)
*gettext
ファミリの C 関数へのアクセスを提供します。これが libc に組み込まれていないシステムでは、代わりにそれらを提供する外部ライブラリを見つけようとします。
method
は、auto
、builtin
、または system
のいずれかです。
JDK
(0.58.0 で追加) (0.62.0 で非推奨)
JNI の非推奨名。dependency('jni')
の代わりに dependency('jdk')
。
JNI
(0.62.0 で追加)
modules
は、jvm
および awt
のいずれかを含む文字列のオプションリストです。
Java Native Interface (JNI) を使用したコンパイルへのアクセスを提供します。検索では、まず環境で JAVA_HOME
が設定されているかどうかを確認し、設定されていない場合は javac
の解決されたパスを使用します。システムは通常、推奨される JDK を、たとえば Linux では /usr/bin/javac
のような既知のパスにリンクします。JAVA_HOME
または解決された javac
からのパスを使用して、この依存関係は、JDK インストールの include
ディレクトリとそのプラットフォーム依存のサブディレクトリをコンパイラのインクルードパスに配置します。modules
が空でない場合、適切なリンカー引数も追加されます。
dep = dependency('jni', version: '>= 1.8.0', modules: ['jvm'])
注意: 解決されたパスの使用により、JDK をアップグレードすると、さまざまなパスが見つからなくなる可能性があります。その場合は、ビルドディレクトリを再構成してください。1 つの回避策は、フォールバックの javac
解決パスの動作に依存する代わりに、JAVA_HOME
を明示的に設定することです。
注意: インクルードパスは、linux
、windows
、darwin
、および sunos
以外のプラットフォームでは壊れている可能性があります。この場合は、PR を提出するか、問題をオープンしてください。
注意: システムが x86_64
以外の場合、JDK <= 1.8
での modules
引数の使用は壊れている可能性があります。この場合は、PR を提出するか、問題をオープンしてください。
libgcrypt
(0.49.0 で追加)
method
は、auto
、config-tool
、または pkg-config
のいずれかです。
libwmf
(0.44.0 で追加)
method
は、auto
、config-tool
、または pkg-config
のいずれかです。
LLVM
Meson は、LLVM バージョン 3.5 以降の LLVM をネイティブにサポートしています。他の config-tool ベースの依存関係と比較して、いくつかの追加機能をサポートしています。
0.44.0 以降、Meson は LLVM の static
キーワード引数をサポートしています。これより前の LLVM >= 3.9 は常に動的にリンクし、古いバージョンは llvm-config
の癖のために静的にリンクしていました。
method
は、auto
、config-tool
、または cmake
のいずれかです。
モジュール、別名コンポーネント
Meson は、LLVM のコンポーネントの概念を独自のモジュール概念にラップします。特定のコンポーネントが必要な場合は、モジュールとして追加すると、Meson が適切な処理を行います。
llvm_dep = dependency('llvm', version : '>= 4.0', modules : ['amdgpu'])
0.44.0 以降、オプションのモジュールも使用できます (これらは静的リンク用に生成される引数に影響します)。
llvm_dep = dependency(
'llvm', version : '>= 4.0', modules : ['amdgpu'], optional_modules : ['inteljitevents'],
)
LLVM ツールの使用
LLVM をライブラリとして使用するだけでなく、そのツールも必要とする場合、同じバージョンを使用することがしばしば有益です。これは、find_program()
の version
引数で部分的に実現できます。ただし、ディストリビューションは異なる LLVM バージョンをかなり異なる方法でパッケージ化する傾向があります。したがって、LLVM の依存関係を直接使用してツールを取得する方が良い場合が多くあります。
llvm_dep = dependency('llvm', version : ['>= 8', '< 9'])
llvm_link = find_program(llvm_dep.get_variable(configtool: 'bindir') / 'llvm-link')
MPI
(0.42.0 で追加)
MPI は C、C++、および Fortran でサポートされています。依存関係は言語固有であるため、language
キーワード引数を使用して、要求された言語を指定する必要があります。つまり、
-
C MPI ヘッダーとライブラリの場合は
dependency('mpi', language: 'c')
-
C++ MPI ヘッダーとライブラリの場合は
dependency('mpi', language: 'cpp')
-
Fortran MPI ヘッダーとライブラリの場合は
dependency('mpi', language: 'fortran')
Meson は MPI に pkg-config を優先しますが、MPI 実装がそれらを提供しない場合は、標準のラッパー実行可能ファイル (mpic
、mpicxx
、mpic++
、mpifort
、mpif90
、mpif77
) を検索します。これらがパスにない場合は、構成中に標準環境変数 MPICC
、MPICXX
、MPIFC
、MPIF90
、または MPIF77
を設定して指定できます。また、system
メソッドを介して Windows 上の Microsoft 実装を使用しようとします。
method
は、auto
、config-tool
、pkg-config
、または system
のいずれかです。
0.54.0 の新機能 config-tool
および system
メソッドの値。以前のバージョンでは、常に pkg-config
、config-tool
、system
の順に試していました。
NetCDF
(0.50.0 で追加)
NetCDF は C、C++、および Fortran でサポートされています。NetCDF の依存関係は言語固有であるため、language
キーワード引数を使用して、要求された言語を指定する必要があります。つまり、
-
C NetCDF ヘッダーとライブラリの場合は
dependency('netcdf', language: 'c')
-
C++ NetCDF ヘッダーとライブラリの場合は
dependency('netcdf', language: 'cpp')
-
Fortran NetCDF ヘッダーとライブラリの場合は
dependency('netcdf', language: 'fortran')
Meson は pkg-config を使用して NetCDF を検索します。
ObjFW
(1.5.0 で追加)
Meson は、ObjFW パッケージのサポートを含め、ObjFW をネイティブにサポートしています。
ObjFW を使用するには、単に依存関係を作成します。
objfw_dep = dependency('objfw')
ObjFW パッケージも使用するには、単にモジュールとして指定します。
objfw_dep = dependency('objfw', modules: ['SomePackage'])
テストで ObjFWTest を使用したいが、アプリケーションをテストに対してリンクしたくないなど、パッケージの有無にかかわらず依存関係が必要な場合は、2 つの依存関係を取得して、適切に使用します。
objfw_dep = dependency('objfw', modules: ['SomePackage'])
objfwtest_dep = dependency('objfw', modules: ['ObjFWTest'])
次に、ライブラリには objfw_dep
を使用し、テストには objfwtest_dep
(両方ではなく) のみを使用します。
OpenMP
(0.46.0 で追加)
この依存関係は、OpenMP サポートに使用する適切なコンパイラフラグやライブラリを選択します。
language
キーワードを使用できます。
OpenSSL
(0.62.0 で追加)
method
は、auto
、pkg-config
、system
、または cmake
のいずれかです。
NumPy
(1.4.0で追加)
method
は auto
, pkg-config
, または config-tool
を指定できます。dependency('numpy')
は、NumPy C APIの通常の使用をサポートします。Fortranコードをバインドするための numpy.f2py
の使用はまだサポートされていません。
pcap
(0.42.0 で追加)
method
は、auto
、config-tool
、または pkg-config
のいずれかです。
Pybind11
(1.1.0で追加)
method
は auto
, pkg-config
, config-tool
, または cmake
を指定できます。
Python3
Python3 は Meson によって特別に処理されます。
- Meson は
pkg-config
を使用しようとします。 pkg-config
が失敗した場合、Meson はフォールバックを使用します。- Windows では、フォールバックは現在の
python3
インタープリターです。 - OSX では、フォールバックは
/Library/Frameworks
のフレームワーク依存関係です。
- Windows では、フォールバックは現在の
この依存関係で見つかった python3
は、モジュールが現在のインタープリターを使用するため、python3
モジュールで使用されるものと異なる場合があることに注意してください。ただし、依存関係は最初に pkg-config
を試みます。
method
は auto
, extraframework
, pkg-config
または sysconfig
を指定できます。
Qt
Meson はネイティブな Qt サポートを備えています。その使用方法は、例で説明するのが最適です。
qt5_mod = import('qt5')
qt5widgets = dependency('qt5', modules : 'Widgets')
processed = qt5_mod.preprocess(
moc_headers : 'mainWindow.h', # Only headers that need moc should be put here
moc_sources : 'helperFile.cpp', # must have #include"moc_helperFile.cpp"
ui_files : 'mainWindow.ui',
qresources : 'resources.qrc',
)
q5exe = executable('qt5test',
sources : ['main.cpp',
'mainWindow.cpp',
processed],
dependencies: qt5widgets)
ここでは、Qt Designer で作成された UI ファイルと、moc
ツールでプリプロセスが必要なソースファイルとヘッダーファイルがそれぞれ1つずつあります。また、rcc
でコンパイルされるリソースファイルも定義します。Meson にどのファイルがどれであるかを伝えるだけで、必要なすべてのツールを正しい順序で起動する処理を自動的に行います。これは、qt5
モジュールの preprocess
メソッドで実行されます。その出力は、ターゲットのソースリストに単純に追加されます。dependency
の modules
キーワードは、Boost の場合と同様に機能します。これは、プログラムが使用する Qt のサブパーツを指示します。
main
キーワード引数を true
に設定すると、qtmain スタティックライブラリによって提供される WinMain()
関数を使用します (この引数は、Windows以外のプラットフォームでは何もしません)。
オプションの private_headers
キーワードを true に設定すると、指定されたモジュールのプライベートヘッダーのインクルードパスがコンパイラーフラグに追加されます。(v0.47.0以降)
注意 プロジェクトでプライベートヘッダーを使用することは悪い考えです。自己責任で行ってください。
method
は auto
, pkg-config
または qmake
を指定できます。
SDL2
SDL2 は、pkg-config
、sdl2-config
config ツール、OSX フレームワーク、または cmake
を使用して検出できます。
method
は auto
, config-tool
, extraframework
, pkg-config
または cmake
を指定できます。
Shaderc
(0.51.0 で追加)
Meson は最初に pkg-config
を使用して shaderc を見つけようとします。アップストリームは現在、3つの異なる pkg-config
ファイルを出荷しており、デフォルトでは、shaderc
、shaderc_combined
、および shaderc_static
の順序でチェックします。static
キーワード引数が true
の場合、Meson は代わりに shaderc_combined
, shaderc_static
, shaderc
の順序でチェックします。
pkg-config
ファイルが見つからない場合、Meson はライブラリを手動で検出しようとします。この場合、-lshaderc_shared
または -lshaderc_combined
のいずれかとリンクしようとします。static キーワード引数が true の場合は後者を優先します。この方法では、shaderc のバージョンを取得することはできないことに注意してください。
method
は、auto
、pkg-config
、または system
のいずれかです。
Threads
この依存関係は、スレッドサポートに使用する適切なコンパイラーフラグおよび/またはライブラリを選択します。
threads を参照してください。
Valgrind
Meson は pkg-config
を使用して valgrind を検出しますが、コンパイルフラグのみを使用し、PIC ではないスタティックライブラリとのリンクは試行しません。
Vulkan
(0.42.0 で追加)
Vulkan は、pkg-config
、または VULKAN_SDK
環境変数を使用して検出できます。
method
は、auto
、pkg-config
、または system
のいずれかです。
WxWidgets
Boost と同様に、WxWidgets は単一のライブラリではなく、モジュールのコレクションです。WxWidgets は wx-config
を介してサポートされています。Meson は modules
を wx-config
の呼び出しに置き換え、次を生成します。
-
wx-config --cxxflags $modules...
を使用してcompile_args
を生成 -
wx-config --libs $modules...
を使用してlink_args
を生成
例
wx_dep = dependency(
'wxwidgets', version : '>=3.0.0', modules : ['std', 'stc'],
)
# compile_args:
$ wx-config --cxxflags std stc
# link_args:
$ wx-config --libs std stc
Zlib
Zlib は pkg-config と cmake のサポートを備えていますが、一部のオペレーティングシステム(windows, macOs, FreeBSD, dragonflybsd, android)では、pkg-config サポートなしでベースオペレーティングシステムの一部として提供されています。新しい System ファインダーは、これらのOSでバンドルされたバージョンとリンクするために使用できます。
method
は auto
, pkg-config
, cmake
, または system
を指定できます。
0.54.0 で新機能 system
メソッド。
DIA SDK
(1.6.0で追加)
Microsoft の Debug Interface Access SDK (DIA SDK) は、Windows 上で、Microsoft Visual Studio の msvc、clang-cl、または clang コンパイラーを使用している場合にのみ利用できます。
DIA SDK ランタイムは、ターゲットに静的にリンクされていません。デフォルトの使用方法では、ランタイム DLL (msdiaXXX.dll) を regsrv32.exe
コマンドで OS に手動で登録する必要があります。これにより、CoCreateInstance
Windows 関数を使用してロードできます。
または、Meson を使用して DIA ランタイム DLL をビルドディレクトリにコピーし、DIA SDK によって提供される NoRegCoCreate
関数を使用して動的にロードすることもできます。これを容易にするために、依存関係の変数 'dll' から DLL パスを読み取り、fs モジュールを使用してコピーできます。例
dia = dependency('diasdk', required: true)
fs = import('fs')
fs.copyfile(dia.get_variable('dll'))
conf = configuration_data()
conf.set('msdia_dll_name', fs.name(dia_dll_name))
メジャーバージョンのみが利用可能です(例:msdia140.dll の場合、バージョンは 14
です)。
1: 基盤となるファイルシステムが大文字と小文字を区別しない場合は、大文字と小文字を区別しないように見える場合があります。
検索結果は