Pkgconfig モジュール
このモジュールは、pkg-config ファイルの単純なジェネレーターです。
使用法
pkg = import('pkgconfig')
bar_dep = dependency('bar')
lib = library('foo', dependencies : [bar])
pkg.generate(lib)
pkg.generate()
生成されるファイルのプロパティは、以下のキーワード引数で指定します。
-
description
: ライブラリを説明する文字列で、Description:
フィールドを設定するために使用されます。 -
extra_cflags
: ヘッダー検索パスの後でCflags
フィールドに追加される追加のコンパイラフラグのリストです。 -
filebase
: pkg-config ファイルに使用するベース名です。たとえば、libfoo
の値は、libfoo.pc
という名前の pkg-config ファイルを生成します。 -
install_dir
: インストール先のディレクトリで、デフォルトではオプションlibdir
の値に/pkgconfig
を続けたものになります。 -
libraries
: ユーザーがリンクする必要があるビルド済みライブラリ (通常は shared_library の結果) のリストです。任意の文字列も提供でき、Libs
フィールドに追加されます。0.45.0 以降、ビルドされたライブラリの依存関係は自動的に追加されます。正確なルールについては、下記の暗黙的な依存関係セクションを参照してください。0.58.0 以降、custom_target() オブジェクトは、リンク可能 (.a
、.so
などの既知の拡張子がある) である限りサポートされています。 -
libraries_private
:Libs.private
フィールドに配置するビルド済みライブラリまたは文字列のリストです。0.45.0 以降、ビルドされたライブラリの依存関係は自動的に追加されます。正確なルールについては、下記の暗黙的な依存関係セクションを参照してください。0.58.0 以降、custom_target() オブジェクトは、リンク可能 (.a
、.so
などの既知の拡張子がある) である限りサポートされています。 -
name
: このライブラリの名前で、Name:
フィールドを設定するために使用されます。 -
subdirs
:include
のどのサブディレクトリをヘッダー検索パスに追加するか。たとえば、ヘッダーを${PREFIX}/include/foobar-1
にインストールする場合、この引数の正しい値はfoobar-1
になります。 -
requires
:Requires
フィールドに配置するためにpkgconfig.generate()
が使用された文字列、pkgconfig の依存関係、またはライブラリのリストです。 -
requires_private
:requires
と同じですが、Requires.private
フィールド用です。 -
url
: ライブラリの URL を含む文字列です。 -
variables
: 生成されるファイルに追加するカスタム変数を持つ文字列のリストです。文字列はname=value
の形式で記述する必要があり、他の pkgconfig 変数を参照できます。例:datadir=${prefix}/share
。名前prefix
、libdir
、およびincludedir
は予約されており、使用することはできません。0.56.0 以降、辞書にすることもできますが、Meson 辞書の順序は保証されていません。これにより、一部の変数が他の変数を参照する場合に問題が発生する可能性があります。値のスペースは\
でエスケープされます。これは、値がパスであり、cflags
またはlibs
引数で使用される場合に必要です。0.59.0 以降、エスケープが不要な場合 (例: スペースで区切られた値のリスト)、代わりにunescaped_variables
キーワード引数を使用する必要があります。0.62.0 以降、参照される組み込みディレクトリ変数は、デフォルトで自動的に作成されます。 -
uninstalled_variables
: アンインストールされた pkg-config ファイルを生成する場合、variables
キーワード引数の代わりに使用されます。0.54.0 以降、値のスペースは\
でエスケープされます。これは、値がパスであり、cflags
またはlibs
引数で使用される場合に必要です。0.59.0 以降、エスケープが不要な場合 (例: スペースで区切られた値のリスト)、代わりにunescaped_uninstalled_variables
キーワード引数を使用する必要があります。 -
version
: このライブラリのバージョンを説明する文字列で、Version:
フィールドを設定するために使用されます (0.46.0 以降)。指定されていない場合は、プロジェクトのバージョンがデフォルトになります。 -
d_module_versions
: この pkg-config ファイルで参照される D ソースのコンパイル時に使用されるモジュールバージョンフラグのリストです。 -
dataonly
: フィールド (0.54.0 以降)。これは、アーキテクチャに依存しない pkg-config ファイルを、アーキテクチャに依存する出力を持つプロジェクトで使用するために使用されます。 -
conflicts
: (0.36.0 以降、0.54.0 より前は誤って警告を発行していました)Conflicts
フィールドに配置される文字列のリストです。
0.46 以降、StaticLibrary
または SharedLibrary
オブジェクトを、オプションで最初の位置引数として渡すことができます。渡された場合、pc ファイルの必須フィールドすべてにデフォルト値が提供されます。
-
install_dir
は、指定されたライブラリと同じ場所にあるpkgconfig
フォルダーに設定されます。 -
description
は、プロジェクトの名前の後にライブラリの名前が続くように設定されます。 -
name
は、ライブラリの名前に設定されます。
0.54.0 以降、アンインストールされた pkg-config ファイルも生成されます。それらは <ビルドディレクトリ>/meson-uninstalled/
に配置されます。プレフィックスにインストールせずに Meson でビルドされたライブラリに対してプロジェクトをビルドすると便利な場合があります。それを行うには、アプリケーションをビルドする前に PKG_CONFIG_PATH=<ビルドディレクトリ>/meson-uninstalled
を設定してください。これにより、pkg-config はこれらの -uninstalled.pc
ファイルを優先し、Meson ビルドディレクトリからライブラリとヘッダーを見つけるようになります。これは、最大限の努力で提供される実験的な機能であり、すべてのユースケースで動作するとは限りません。
暗黙的な依存関係
pkg-config ファイルに暗黙的に追加される依存関係を見つけるために従う正確なルールは、時間の経過とともに進化してきました。Meson 0.49.0 のルールは次のとおりです。以前のバージョンでは、わずかに異なる動作をする可能性があります。
- 見つからないライブラリまたは依存関係は無視されます。
- ライブラリと依存関係は、
libraries
またはrequires
キーワード引数で明示的に追加されているか、メインライブラリ (最初の位置引数) である場合を除き、デフォルトでプライベート (つまり、Requires.private:
またはLibs.private:
に追加) です。 - ライブラリと依存関係は重複排除されます。パブリックとプライベートの両方 (例:
Requires:
とRequires.private:
) に追加された場合、プライベートリストから削除されます。 - 共有ライブラリ (つまり、
shared_library()
であり、library()
ではない) は、Libs:
またはLibs.private:
に-lfoo
のみを追加しますが、その依存関係はプルされません。これは、依存関係は静的リンクにのみ必要になるためです。 - その他のライブラリ (つまり、
static_library()
またはlibrary()
) は、Libs:
またはLibs.private:
に-lfoo
を追加し、その依存関係をLibs.private:
またはRequires.private:
に再帰的に追加します。 - pkg-config で提供される依存関係は、
Requires:
またはRequires.private:
に追加されます。依存関係を宣言するときにバージョンが指定された場合、生成されたファイルにも書き込まれます。 - スレッド依存関係 (つまり、
dependency('threads')
) は、Libs:
またはLibs.private:
に-pthread
を追加します。 - 内部依存関係 (つまり、
declare_dependency(compiler_args : '-DFOO', link_args : '-Wl,something', link_with : foo)
) は、パブリックの場合はCflags:
にcompiler_args
を追加し、パブリックの場合はLibs:
に、プライベートの場合はLibs.private:
にlink_args
とlink_with
を追加します。 - その他の依存関係タイプは、パブリックの場合はコンパイラ引数を
Cflags:
に追加し、パブリックの場合はリンカー引数をLibs:
に、プライベートの場合はLibs.private:
に追加します。 pkg.generate(mylib)
を使用してライブラリの pkg-config ファイルを生成すると、その後mylib
が表示されるpkg.generate()
の呼び出しでは、Libs:
またはLibs.private:
の代わりにRequires:
またはRequires.private
が生成されます。
再配置可能な pkg-config ファイル
デフォルトでは、pkg.generate
で生成されたファイルにはハードコードされたプレフィックスパスが含まれています。それらを再配置可能にするために、pkgconfig.relocatable
組み込みオプションが提供されています。Pkgconfig モジュールオプションを参照してください。
検索結果は次のとおりです。