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 模块选项。
搜索结果为