Pkgconfig 模块
此模块是一个简单的 pkg-config 文件生成器。
用法
pkg = import('pkgconfig')
bar_dep = dependency('bar')
lib = library('foo', dependencies : [bar])
pkg.generate(lib)
pkg.generate()
生成的文件的属性使用以下关键字参数指定。
-
description描述库的字符串,用于设置Description:字段 -
extra_cflags要添加到Cflags字段中的额外编译器标志列表,位于头文件搜索路径之后 -
filebase用于 pkg-config 文件的基本名称;例如,libfoo的值将生成一个名为libfoo.pc的 pkg-config 文件 -
install_dir要安装到的目录,默认为选项libdir的值,后跟/pkgconfig -
libraries用户需要链接的已构建库列表(通常是shared_library的结果)。也可以提供任意字符串,它们将被添加到Libs字段中。从 0.45.0 版本开始,已构建库的依赖项将被自动添加,有关确切规则,请参阅下面的 隐式依赖项 部分。从 0.58.0 版本开始,只要它们是可链接的(具有已知的扩展名,例如.a、.so等),custom_target()对象也受支持。 -
libraries_private要放入Libs.private字段中的已构建库或字符串列表。从 0.45.0 版本开始,已构建库的依赖项将被自动添加,有关确切规则,请参阅下面的 隐式依赖项 部分。从 0.58.0 版本开始,只要它们是可链接的(具有已知的扩展名,例如.a、.so等),custom_target()对象也受支持。 -
name此库的名称,用于设置Name:字段 -
subdirs应将include的哪些子目录添加到头文件搜索路径中,例如,如果您将头文件安装到${PREFIX}/include/foobar-1中,此参数的正确值为foobar-1 -
requires字符串列表,pkg-config 依赖项或库,用于将pkgconfig.generate()用于放入Requires字段中 -
requires_private与requires相同,但用于Requires.private字段 -
url包含库 URL 的字符串 -
variables包含要添加到生成文件中的自定义变量的字符串列表。字符串必须采用name=value的形式,并且可以引用其他 pkgconfig 变量,例如datadir=${prefix}/share。名称prefix、libdir和includedir是保留的,不能使用。从 0.56.0 版本开始,它也可以是一个字典,但 Meson 字典的排序没有保证,这可能会在一些变量引用其他变量时导致问题。值中的空格将用\转义,这是必需的,因为在值是路径并且用于cflags或libs参数的情况下。从 0.59.0 版本开始,如果不需要转义(例如,空格分隔的值列表),则应使用unescaped_variables关键字参数。从 0.62.0 版本开始,默认情况下会自动创建引用的内置目录变量。 -
uninstalled_variables用于代替variables关键字参数,用于生成未安装的 pkg-config 文件。从 0.54.0 版本开始,值中的空格将用\转义,这是必需的,因为在值是路径并且用于cflags或libs参数的情况下。从 0.59.0 版本开始,如果不需要转义(例如,空格分隔的值列表),则应使用unescaped_uninstalled_variables关键字参数。 -
version描述此库版本的字符串,用于设置Version:字段。(从 0.46.0 版本开始)如果未指定,则默认为项目版本。 -
d_module_versions此 pkg-config 文件引用的 D 源代码编译时使用的模块版本标志列表 -
dataonly字段。(从 0.54.0 版本开始)这用于在项目也有体系结构相关的输出时使用的体系结构无关的 pkg-config 文件。 -
conflicts(从 0.36.0 版本开始,在 0.54.0 版本之前错误地发出警告)要放入Conflicts字段中的字符串列表。
从 0.46 版本开始,可以可选地将 StaticLibrary 或 SharedLibrary 对象作为第一个位置参数传递。如果提供了一个对象,将为 pc 文件的所有必需字段提供默认值
-
install_dir设置为与提供的库相同位置的pkgconfig文件夹。 -
description设置为项目名称后跟库的名称。 -
name设置为库的名称。
从 0.54.0 版本开始,也会生成未安装的 pkg-config 文件。它们位于 <build dir>/meson-uninstalled/ 中。有时,在不将它们安装到前缀的情况下,使用 Meson 构建的库构建项目很有用。为此,只需在构建应用程序之前设置 PKG_CONFIG_PATH=<builddir>/meson-uninstalled 即可。这将导致 pkg-config 优先使用这些 -uninstalled.pc 文件并从 Meson 构建目录中查找库和头文件。这是一个实验性功能,以尽力提供,它可能不适用于所有用例。
隐式依赖项
用于查找被隐式添加到 pkg-config 文件中的依赖项的确切规则随着时间的推移而演变。以下是截至 Meson 0.49.0 版本的规则,之前的版本可能会有略微不同的行为。
- 未找到的库或依赖项将被忽略。
- 库和依赖项默认情况下是私有的(即添加到
Requires.private:或Libs.private:中),除非它们在libraries或requires关键字参数中被明确添加,或者为主库(第一个位置参数)。 - 库和依赖项将被去重,如果它们在公有和私有中都被添加(例如
Requires:和Requires.private:),则它将从私有列表中删除。 - 共享库(即
shared_library(),而不是library())仅将-lfoo添加到Libs:或Libs.private:中,但不会提取它们的依赖项。这是因为依赖项仅在静态链接时才需要。 - 其他库(即
static_library()或library())将-lfoo添加到Libs:或Libs.private:中,并递归地将其依赖项添加到Libs.private:或Requires.private:中。 - pkg-config 提供的依赖项将被添加到
Requires:或Requires.private:中。如果在声明该依赖项时指定了版本,它也将被写入生成的文件中。 - 线程依赖项(即
dependency('threads'))将-pthread添加到Libs:或Libs.private:中。 - 内部依赖项(即
declare_dependency(compiler_args : '-DFOO', link_args : '-Wl,something', link_with : foo))将compiler_args添加到Cflags:中(如果为公有),将link_args和link_with添加到Libs:中(如果为公有),或将Libs.private:添加到Libs.private:中(如果为私有)。 - 其他依赖项类型将它们的编译器参数添加到
Cflags:中(如果为公有),并将链接器参数添加到Libs:中(如果为公有),或将Libs.private:添加到Libs.private:中(如果为私有)。 - 一旦使用
pkg.generate(mylib)为库生成一个 pkg-config 文件,任何后续对pkg.generate()的调用(其中 mylib 出现),将生成Requires:或Requires.private,而不是Libs:或Libs.private:。
可重定位的 pkg-config 文件
默认情况下,pkg.generate 生成的文件包含硬编码的前缀路径。为了使它们可重定位,提供了 pkgconfig.relocatable 内置选项。请参阅 Pkgconfig 模块选项。
搜索结果为