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。名前 prefixlibdir、および 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_argslink_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 モジュールオプションを参照してください。

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