フロントエンドと複数のバックエンドに分割されたライブラリがあります。クライアント プログラムは、フロントエンド ライブラリと 1 つのバックエンド ライブラリに対してリンクする必要があります。フロントエンドで pkg-config が呼び出されたときに、何らかのバックエンドが指定されるように pkg-config に強制させたいと思います。
フロントエンドを libfoo-frontend と呼び、バックエンドを libfoo-backend-alpha と libfoo-backend-beta と呼びましょう。
明らかな解決策は、依存関係を逆にすることのように見えるかもしれません - 各バックエンドに「Requires: libfoo-frontend」を持たせます。ただし、pkg-config はlibfoo-frontend フラグの前にlibfoo-backend フラグを与えるため、これは機能しません。つまり、"-lfoo-backend-alpha -lfoo-frontend" を指定したリンク コマンド ラインで終了し、リンカは libfoo-backend-alpha をインクルードすることはありません。 libfoo-frontend の依存関係が満たされていない場合、後で失敗します。
私の現在の解決策は、pkg-config 仕様がフロントエンドとバックエンド間の依存関係を指定していないことです。フロントエンドと一部のバックエンドの両方にリンクするかどうかは、ユーザー次第です。欠点は、これが必要であることをユーザーが認識している必要があることです。バックエンドへのリンクを忘れると、依存関係が満たされていないためにリンクが失敗するため、あまり情報がありません。
私が望んでいた解決策は、フロントエンドの仕様に「Requires: libfoo-backend」のような行を含め、すべてのバックエンドの pkg-config 仕様に「Provides: libfoo-backend」のような行を含めることです。次に、ユーザーは「pkg-config --libs libfoo-frontend libfoo-backend-beta」のようなことを行います。ユーザーが何らかのバックエンドを指定するのを忘れた場合、pkg-config はそれらを思い出させるために文句を言います。残念ながら、pkg-config にはそのような「Requires」キーワードはありません。