2017-08-09 180 views
1

我在幾個C項目(projectAprojectB)中使用介子,其中projectBprojectA鏈接到庫。在projectA/meson.build中,我寫了一個使用介子的pkg-configprojectA.pc文件,它按預期安裝到join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig')在meson.build中設置PKG_CONFIG_PATH

projectB/meson.build我使用dependency('projectA')來查找projectA.pc文件。

當我使用一個自定義安裝前綴建立projectAprojectBmeson無法找到projectA.pc建設projectB時。有沒有辦法從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()) 

項目B/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 

有沒有辦法告訴projectB/meson.builddependency()應該考慮join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig')

我想有一個環境變量介子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:參數被忽略(它不存在文檔)。

從介子添加$ {prefix}/$ {libdir}/pkgconfig目錄到PKG_CONFIG_PATH對我來說很有意義。有沒有辦法做到這一點?

回答

0

在IRC詢問後,我被告知PKG_CONFIG_PATH應該由用戶(而不是我)設置,所以介子不提供改變它的方法。

在這種情況下,最好的方法是使用子項目或包裹,因此介子一次處理所有內容。

0

設置PKG_CONFIG_PATH到任何地方projectA.pc文件是當您生成projectB時。

是的,PKG_CONFIG_PATH是肯定的用戶。但是,在這種情況下,誰編譯你的projectAprojectB是一個用戶,即使都是。

ie)當你想編譯projectB因爲你想測試projectB對新版本的projectA安裝到不同的目錄,那麼你必須調整PKG_CONFIG_PATH

是的,如果您將projectBprojectA設置爲subproject,那麼您的用戶會更容易。