FindPkgConfig----CMake的pkg-config模块

本文详细介绍了CMake中的FindPkgConfig模块,包括如何查找pkg-config执行文件及使用pkg_check_modules()和pkg_search_module()命令。文章还解释了这些命令如何检查模块的存在性及其版本,并展示了实际应用的例子。

FindPkgConfig

A pkg-config module for CMake.

CMake的pkg-config模块。

Finds the pkg-config executable and add the pkg_check_modules() and pkg_search_module() commands.

查找 pkg-config 执行档并且添加 pkg_check_modules() 和 pkg_search_module() 命令。

In order to find the pkg-config executable, it uses the PKG_CONFIG_EXECUTABLE variable or the PKG_CONFIG environment variable first.

为了找到 pkg-config 执行档,首先使用 PKG_CONFIG_EXECUTABLE 变量或者 PKG_CONFIG 环境变量。

pkg_check_modules

Checks for all the given modules.

检查所有给出的模块。

pkg_check_modules(<PREFIX> [REQUIRED] [QUIET]
                  [NO_CMAKE_PATH] [NO_CMAKE_ENVIRONMENT_PATH]
                  <MODULE> [<MODULE>]*)

When the REQUIRED argument was set, macros will fail with an error when module(s) could not be found.

如果设置了 REQUIRED 参数,未找到模块时宏将错误并失败。

When the QUIET argument is set, no status messages will be printed.

如果设置了 QUIET 参数,将不打印状态信息。

By default, if CMAKE_MINIMUM_REQUIRED_VERSION is 3.1 or later, or if PKG_CONFIG_USE_CMAKE_PREFIX_PATH is set, the CMAKE_PREFIX_PATH, CMAKE_FRAMEWORK_PATH, and CMAKE_APPBUNDLE_PATH cache and environment variables will be added to pkg-config search path. The NO_CMAKE_PATH and NO_CMAKE_ENVIRONMENT_PATH arguments disable this behavior for the cache variables and the environment variables, respectively.

默认的,如果 CMAKE_MINIMUM_REQUIRED_VERSION 是3.1或之后的版本,或者设置了 PKG_CONFIG_USE_CMAKE_PREFIX_PATH,如下的缓存和环境变量将被添加到 pkg-config 查找路径:CMAKE_PREFIX_PATH,CMAKE_FRAMEWORK_PATH 和 CMAKE_APPBUNDLE_PATH 。 NO_CMAKE_PATH 和 NO_CMAKE_ENVIRONMENT_PATH 参数分别禁用上述的关于缓存变量和环境变量的行为。

It sets the following variables:

设置了如下的变量:

PKG_CONFIG_FOUND          ... if pkg-config executable was found
PKG_CONFIG_EXECUTABLE     ... pathname of the pkg-config program
PKG_CONFIG_VERSION_STRING ... the version of the pkg-config program found
                              (since CMake 2.8.8)

For the following variables two sets of values exist; first one is the common one and has the given PREFIX. The second set contains flags which are given out when pkg-config was called with the --static option.

存在下列的2个系列值;第一个系列是常用的并且以给出的 PREFIX 开始。第二个系列在当 pkg-config 被调用时带有 --static 选项时,包含给出的符号。

<XPREFIX>_FOUND          ... set to 1 if module(s) exist
<XPREFIX>_LIBRARIES      ... only the libraries (w/o the '-l')
<XPREFIX>_LIBRARY_DIRS   ... the paths of the libraries (w/o the '-L')
<XPREFIX>_LDFLAGS        ... all required linker flags
<XPREFIX>_LDFLAGS_OTHER  ... all other linker flags
<XPREFIX>_INCLUDE_DIRS   ... the '-I' preprocessor flags (w/o the '-I')
<XPREFIX>_CFLAGS         ... all required cflags
<XPREFIX>_CFLAGS_OTHER   ... the other compiler flags
<XPREFIX> = <PREFIX>        for common case
<XPREFIX> = <PREFIX>_STATIC for static linking

There are some special variables whose prefix depends on the count of given modules. When there is only one module, <PREFIX> stays unchanged. When there are multiple modules, the prefix will be changed to <PREFIX>_<MODNAME>:

有一些特殊的变量前缀依赖给出的模块数。当仅有一个模块给出时,<PREFIX> 保持不变。当有多个模块时,前缀将变为 <PREFIX>_<MODNAME> :

<XPREFIX>_VERSION    ... version of the module
<XPREFIX>_PREFIX     ... prefix-directory of the module
<XPREFIX>_INCLUDEDIR ... include-dir of the module
<XPREFIX>_LIBDIR     ... lib-dir of the module
<XPREFIX> = <PREFIX>  when |MODULES| == 1, else
<XPREFIX> = <PREFIX>_<MODNAME>

A <MODULE> parameter can have the following formats:

<MODULE> 参数可以是如下的格式:

{MODNAME}            ... matches any version
{MODNAME}>={VERSION} ... at least version <VERSION> is required
{MODNAME}={VERSION}  ... exactly version <VERSION> is required
{MODNAME}<={VERSION} ... modules must not be newer than <VERSION>

Examples

例如

pkg_check_modules (GLIB2   glib-2.0)
pkg_check_modules (GLIB2   glib-2.0>=2.10)

Requires at least version 2.10 of glib2 and defines e.g. GLIB2_VERSION=2.10.3

需要 glib2 的版本至少是2.10并且定义项如 GLIB2_VERSION=2.10.3

pkg_check_modules (FOO     glib-2.0>=2.10 gtk+-2.0)

Requires both glib2 and gtk2, and defines e.g. FOO_glib-2.0_VERSION=2.10.3 and FOO_gtk+-2.0_VERSION=2.8.20

请求 glib2 和 gtk2,并且定义如 FOO_glib-2.0_VERSION=2.10.3 和 FOO_gtk+-2.0_VERSION=2.8.20

pkg_check_modules (XRENDER REQUIRED xrender)

Defines for example:

定义例子:

XRENDER_LIBRARIES=Xrender;X11``
XRENDER_STATIC_LIBRARIES=Xrender;X11;pthread;Xau;Xdmcp

pkg_search_module

Same as pkg_check_modules(), but instead it checks for given modules and uses the first working one.

如同 pkg_check_modules(),但是代替它检查给定的模块并使用第一个工作的。

pkg_search_module(<PREFIX> [REQUIRED] [QUIET]
                  [NO_CMAKE_PATH] [NO_CMAKE_ENVIRONMENT_PATH]
                  <MODULE> [<MODULE>]*)

Examples

例如

pkg_search_module (BAR     libxml-2.0 libxml2 libxml>=2)

PKG_CONFIG_EXECUTABLE

Path to the pkg-config executable.

pkg-config 执行档的路径。

PKG_CONFIG_USE_CMAKE_PREFIX_PATH

Whether pkg_check_modules() and pkg_search_module() should add the paths in CMAKE_PREFIX_PATH, CMAKE_FRAMEWORK_PATH, and CMAKE_APPBUNDLE_PATH cache and environment variables to pkg-config search path.

pkg_check_modules() 和 pkg_search_module() 是否应该添加路径到 CMAKE_PREFIX_PATH, CMAKE_FRAMEWORK_PATH 和 CMAKE_APPBUNDLE_PATH 缓存和环境变量到 pkg-config 的搜索路径。

If this variable is not set, this behavior is enabled by default if CMAKE_MINIMUM_REQUIRED_VERSION is 3.1 or later, disabled otherwise.

如果变量没设置,在 CMAKE_MINIMUM_REQUIRED_VERSION 为3.1或以后的版本这个行为缺省是启用的,否则禁用。

转载于:https://www.cnblogs.com/the-capricornus/p/5619884.html

<think>我们正在解决如何通过pkg-config检查OpenCV 4的版本信息。根据用户的问题,我们需要使用pkg-config工具来查询OpenCV的版本。 根据引用[1]:pkg-config会在特定路径下查找.pc文件。如果找不到,需要设置PKG_CONFIG_PATH环境变量指向包含opencv.pc的目录。 因此,我们可以通过以下步骤: 1. 确保已经安装了pkg-config工具(通常系统会自带)。 2. 使用pkg-config查询opencv的版本。 具体命令为: pkg-config --modversion opencv4 但是,如果系统上同时存在多个版本的OpenCV,或者pkg-config没有找到opencv4.pc文件,则可能会报错。这时需要设置PKG_CONFIG_PATH环境变量。 例如,如果OpenCV安装在自定义路径(比如/usr/local/opencv4)下,那么opencv4.pc文件可能位于/usr/local/opencv4/lib/pkgconfig目录中。我们可以这样设置: export PKG_CONFIG_PATH=/usr/local/opencv4/lib/pkgconfig:$PKG_CONFIG_PATH 然后再运行: pkg-config --modversion opencv4 注意:有些系统可能将opencv的.pc文件命名为opencv.pc,而不是opencv4.pc。因此,如果使用opencv4作为包名找不到,可以尝试使用opencv: pkg-config --modversion opencv 另外,如果用户安装的是OpenCV4,那么通常包名是opencv4,但具体取决于安装方式。例如,从源码安装时,CMake配置中有一个选项可以设置包名(OPENCV_PC_FILE_NAME)。 如果上述方法都不行,我们可以考虑直接查找opencv.pc文件并读取版本信息: find / -name opencv.pc 2>/dev/null # 或者 find / -name opencv4.pc 2>/dev/null 然后,查看该文件中的Version字段。 总结步骤: 步骤1:尝试使用pkg-config查询版本 pkg-config --modversion opencv4 或 pkg-config --modversion opencv 步骤2:如果报错(如未找到包),则设置PKG_CONFIG_PATH export PKG_CONFIG_PATH=/path/to/opencv4/lib/pkgconfig:$PKG_CONFIG_PATH # 然后再次运行步骤1的命令 步骤3:如果仍然不行,尝试查找.pc文件并手动读取版本 cat /path/to/opencv.pc | grep Version 另外,根据引用[4]中提到的OpenCV编译问题,我们也可以考虑通过OpenCV自带的头文件或程序来获取版本,但用户要求使用pkg-config,所以我们主要围绕pkg-config。 但是,如果用户没有安装pkg-config,则需要先安装: sudo apt install pkg-config # 对于Debian/Ubuntu 生成相关问题: 1. 如何设置PKG_CONFIG_PATH环境变量? 2. 除了pkg-config,还有其他方法检查OpenCV版本吗? 3. 为什么pkg-config找不到OpenCV的.pc文件? 4. 如何安装pkg-config工具? 5. 如何确认OpenCV的安装路径? 注意:在回答中,我们引用了站内引用[1]和[4]。</think>### 如何通过 pkg-config 检查 OpenCV 4 版本 #### 方法 1:直接查询版本 在终端执行以下命令: ```bash pkg-config --modversion opencv4 ``` 若成功安装,将返回 OpenCV 4 的版本号,例如: ```bash 4.5.4 ``` #### 方法 2:解决 "Package not found" 错误 若出现错误提示: ```bash Package opencv4 was not found... No package 'opencv4' found ``` 需按以下步骤操作: 1. **定位 `.pc` 文件** 查找 `opencv4.pc` 文件位置(通常位于 OpenCV 安装路径的 `lib/pkgconfig/` 目录): ```bash sudo find / -name opencv4.pc 2>/dev/null ``` 典型路径示例: `/usr/local/lib/pkgconfig/opencv4.pc` 2. **设置环境变量** 将包含 `.pc` 文件的目录添加到 `PKG_CONFIG_PATH`(引用[^1]): ```bash export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH ``` 3. **重新查询版本** ```bash pkg-config --modversion opencv4 ``` #### 方法 3:检查配置文件内容 直接读取 `.pc` 文件中的版本信息: ```bash cat /usr/local/lib/pkgconfig/opencv4.pc | grep Version ``` 输出示例: ```bash Version: 4.9.0 ``` ### 常见问题解决 - **未安装 pkg-config 工具** 先安装基础工具: ```bash sudo apt install pkg-config ``` - **多版本共存冲突** 若同时存在 OpenCV 3 和 4,需明确指定查询的包名: ```bash pkg-config --modversion opencv4 # 明确查询 OpenCV4 ``` - **自定义安装路径** 若通过源码编译安装到自定义路径(如 `/opt/opencv4`),需正确指向其 `pkgconfig` 目录: ```bash export PKG_CONFIG_PATH=/opt/opencv4/lib/pkgconfig:$PKG_CONFIG_PATH ``` > **提示**:OpenCV 默认编译会生成 `opencv4.pc` 文件,若未找到请检查 CMake 编译时是否启用了 `OPENCV_GENERATE_PKGCONFIG=ON` 选项[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值