2017-08-09 161 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,那么您的用户会更容易。