【cmake】pkg_check_modules 使用详解

本文介绍了pkg_check_modules在CMake中的使用,包括其检索目录设置、语法格式、以及如何通过IMPORTED_TARGETS和不使用该选项引入libavfilter.pc文件。详细讲解了如何设置环境变量、查找PC文件并链接库文件到项目中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pkg_check_modules 主要通过 .pc 文件引入整个库,该命令会解析指定的 .pc 文件,并将所需的编译和链接信息提取到 CMake 变量中,以便后续使用。


目录

1、pkg_check_modules 的检索目录

2、pkg_check_modules 语法格式

3、应用:pkg_check_modules 引入 libavfilter.pc 

3.1 使用 IMPORTED_TARGETS

3.2 不使用 IMPORTED_TARGETS


1、pkg_check_modules 的检索目录

一般情况下,pkg_check_modules 会在默认路径(标准路径)下寻找对应的 pc 文件,如 /usr/lib/pkgconfig、/usr/local/lib/pkgconfig,如果 .pc 文件位于非标准位置,可以通过设置 PKG_CONFIG_PATH环境变量来告诉 pkg-config 查找 .pc 文件的路径。

# ffmpeg 的pc文件位置:${PROJECT_SOURCE_DIR}/3rdparty/ffmpeg/lib/pkgconfig
# 系统环境变量:PKG_CONFIG_PATH
# 格式: set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:<pc文件位置>")
set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${PROJECT_SOURCE_DIR}/3rdparty/ffmpeg/lib/pkgconfig")

2、pkg_check_modules 语法格式

pkg_check_modules使用方法和 find_package 类似,基本语法如下:

pkg_check_modules(<PREFIX> REQUIRED|QUIET|OPTIONAL [IMPORTED_TARGETS] <modules>...)

①  <PREFIX>

相当于为后续要引入的库起一个别名,这个别名会被用于多个地方,最典型的就是Cmake变量,头文件路径会被保存到  XXX_INCLUDE_DIRSÿ

### 使用 `PKG_CHECK_MODULES` 和 `AC_SUBST` #### PKG_Check_Modules `PKG_CHECK_MODULES` 是 Autotools 提供的一个宏,用于检测特定库的存在并设置相应的编译标志。此宏通常与 pkg-config 工具一起工作来查找外部依赖项。 当调用 `PKG_CHECK_MODULES([VAR_PREFIX], [MODULES])` 时,如果指定了模块存在,则会定义两个变量: - `${VAR_PREFIX}_CFLAGS`: 包含编译所需的预处理器和包含路径选项。 - `${VAR_PREFIX}_LIBS`: 包含链接所需的目标文件列表。 例如,在配置脚本中可以这样写[^1]: ```m4 PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.32]) ``` 这行命令将会尝试找到版本大于等于 2.32 的 glib 库,并将相关的 C 编译器标记存储到名为 GLIB_CFLAGS 和 GLIB_LIBS 的 shell 变量中。 #### AC_Subst `AC_SUBST` 宏的作用是在 Makefile.in 文件里替换指定的占位符为实际值。通过这种方式可以在构建过程中动态调整最终生成的 Makefile 中的内容。 假设希望把前面提到的 ${GLIB_CFLAGS} 和 ${GLIB_LIBS} 添加到 Makefile.am 或者其他模板文件里面去,那么就需要使用如下形式的语句[^2]: ```m4 AC_SUBST(GLIB_CFLAGS) AC_SUBST(GLIB_LIBS) ``` 这样做之后,在 configure 脚本运行期间就会自动把这些环境变量传递给后续阶段使用的 makefiles。 完整的例子可能看起来像下面这样: ```m4 AC_INIT([MyProject], [1.0]) AM_INIT_AUTOMAKE([-Wall -Werror foreign]) # Check for libraries. PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.32]) # Substitute the variables into Makefile templates. AC_SUBST(GLIB_CFLAGS) AC_SUBST(GLIB_LIBS) AC_CONFIG_FILES([Makefile src/Makefile]) AC_OUTPUT ``` 在这个实例中,先初始化项目基本信息;接着利用 AM_INIT_AUTOMAKE 来启用 Automake 支持以及一些警告级别设定;再下来就是检查必要的第三方库是否存在及其最低版本要求;最后一步则是告诉 Autoconf 去处理哪些 Makefile 模板文件并将之前查找到的信息嵌入其中[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值