4

我在几个 C 项目(projectAprojectB)中使用介子,其中projectB链接到来自projectA. 在projectA/meson.build中,我pkg-config projectA.pc使用介子编写了一个文件,该文件join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig')按预期安装。

projectB/meson.builddependency('projectA')用来寻找projectA.pc文件。

当我使用自定义安装前缀构建projectAprojectB,构建时meson无法找到。有没有办法指定一个from ?projectA.pcprojectBPKG_CONFIG_PATHprojectB/meson.build

这个问题是用这个最小的例子重现的:

项目A/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.build应该dependency()调查join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig')

我试图在介子dependency()调用中设置一个环境变量,但该env参数不存在dependency()

pkgconfigpath = join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig')
message('pkgconfig: @0@'.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 对我来说很有意义。有没有办法做到这一点?

4

2 回答 2

2

在 IRC 上询问后,我被告知PKG_CONFIG_PATH应该由用户(而不是我)设置,所以介子不提供改变它的方法。

在这种情况下,最好的方法是使用子项目或包装,以便介子一次处理所有事情。

于 2017-08-09T20:08:10.077 回答
0

设置为构建时文件所在的PKG_CONFIG_PATH任何位置。projectA.pcprojectB

是的,PKG_CONFIG_PATH肯定是给用户的。但是,在这种情况下,无论谁编译您projectA并且projectB是用户,即使也是。

即)当您projectB因为要projectB针对安装到不同目录的新版本 projectA 进行测试而要编译时,则必须调整PKG_CONFIG_PATH.

是的,如果您将其设置为projectBsubproject 对您的用户来说会容易得多。projectA

于 2017-08-10T02:19:36.217 回答