2017-08-09 33 views
1

私は、Cプロジェクト(projectAprojectB)の中でmesonを使用しています。projectAからprojectBにライブラリへのリンクがあります。 projectA/meson.buildでは、pkg-configprojectA.pcというファイルを中間子を使用して書いています。これは、期待通りにjoin_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig')にインストールされています。meson.buildの中にPKG_CONFIG_PATHを設定する

projectB/meson.builddependency('projectA')を使用してprojectA.pcファイルを探します。

私はprojectAprojectBを構築するために、カスタムインストール接頭辞を使用すると、mesonprojectBを構築する際にprojectA.pcを見つけることができません。 projectB/meson.buildからPKG_CONFIG_PATHを指定する方法はありますか?

この問題は、この最小限の例で再現されています

PROJECTA/meson.build:

project('projectA', 'c', version: '1') 

pkg = import('pkgconfig') 

pkg.generate(name : 'projectA', 
      description: 'ProjectA', 
      version: meson.project_version()) 

ProjectBの/ meson.build:

project('projectB', 'c', version: '1') 
dep = dependency('projectA') 

コマンド:

meson buildA projectA --prefix=$PWD/install 
(cd buildA && ninja install) 
#[0/1] Installing files. 
#Installing /tmp/test/buildA/meson-private/projectA.pc to /tmp/test/install/lib/x86_64-linux-gnu/pkgconfig 
# [ The error: ] 
meson buildB projectB --prefix=$PWD/install 
#Native dependency 'projectA' not found 
# [ My workaround: ] 
PKG_CONFIG_PATH="$PWD/install/lib/x86_64-linux-gnu/pkgconfig" meson buildB projectB --prefix=$PWD/install 
# Native dependency projectA found: YES 1 

dependency()join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig')になりますprojectB/meson.buildことを伝える方法はありますか?

私は中間子dependency()コールの内側に設定された環境変数を持ってしようとしていたが、env引数はdependency()のために存在しません:

pkgconfigpath = join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig') 
message('pkgconfig: @[email protected]'.format(pkgconfigpath)) 
env_pkgconfig = environment() 
env_pkgconfig.set('PKG_CONFIG_PATH', pkgconfigpath) 
projectA_dep = dependency('projectA', env: env_pkgconfig) 

残念ながら、依存関係にあるenv:引数は無視されます(それが存在しませんドキュメント)。

mesonから$ {prefix}/$ {libdir}/pkgconfigディレクトリをPKG_CONFIG_PATHに追加すると意味があります。それを行う方法はありますか?

答えて

0

IRCに質問したところ、私はPKG_CONFIG_PATHをユーザーが設定する必要があります(私ではありません)ので、それを変更する方法はありません。

この場合の最適なアプローチは、サブプロジェクトまたはラップを使用することです。したがって、中間子はすべてを一度に処理します。

0

と設定した場合projectA.pcファイルは、projectBをビルドするときに設定します。

はい、PKG_CONFIG_PATHは確かです。しかし、この文脈では、あなたのprojectAprojectBをコンパイルする者は誰でも、でもです。

ie)projectBを別のディレクトリにインストールされている新しいバージョンのprojectAに対してprojectBをテストするためにコンパイルする場合は、PKG_CONFIG_PATHを調整する必要があります。

はい、projectAのユーザーがprojectBの場合は、subprojectと設定するほうがはるかに簡単です。

関連する問題