2018-06-02 cmake 的 pkg-config 使用问题。

由于历史的原因, 不是所有库都有相关的 **.cmake 文件, 因此不能用 find_package 函数。有的时候需要通过 pkg-config 工具实现。 如下例的使用.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
find_package(PkgConfig REQUIRED)
if (PKGCONFIG_FOUND)
message ("Find pkg-config module.")
endif (PKGCONFIG_FOUND)

pkg_check_modules (JSON_C REQUIRED json-c)
if (JSON_C_FOUND)
#message ("the json-c version:${JSON_C_VERSION}")
#message ("the prefix-directory of the module ${JSON_C_PREFIX}")
#message ("JSON_C's libraries is ${JSON_C_LIBRARIES}")
set (EXTRA_LIBS ${EXTRA_LIBS} ${JSON_C_LIBRARIES})
#message ("JSON_C's head file directories is ${JSON_C_INCLUDE_DIRS}")
set (INCLUDE_DIRS ${INCLUDE_DIRS} ${JSON_C_INCLUDE_DIRS})
endif (JSON_C_FOUND)

其中

1
2
3
4
find_package(PkgConfig REQUIRED)
if (PKGCONFIG_FOUND)
message ("Find pkg-config module.")
endif (PKGCONFIG_FOUND)

是为了增加 cmake 的 pkg-config 模块, 并由 pkg-config 提供 pkg_check_modules 和 pkg_search_modules 函数来实现相关功能。 find_package 是由 cmake 提供的函数, 由该函数提供加载外部的包(当然也包括外部库)。其用法如下:

1
2
3
4
find_package(<package> [version] [EXACT] [QUIET] [MODULE]
[REQUIRED] [[COMPONENTS] [components...]]
[OPTIONAL_COMPONENTS components...]
[NO_POLICY_SCOPE])

他通过下列的函数进行反馈。 ```cmake-变量描述 ${PACKAGE_FOUND} # 反馈是否找到了相关的包或库。 ${PACKAGE_EXECUTABLE} # 返回 package的路径。 ${PACKAGE_VERSION_STRING} # 返回 package 的本版信息。


由 pkg-config 模块提供的 pkg_check_modules 模块, 实现了其中类似 find_package 函数的功能。下面就简单介绍下: ```cmake pkg_check_modules( [REQUIRED] [QUIET] [NO_CMAKE_PATH] [NO_CMAKE_ENVIRONMENT_PATH] [] ...) pkg_check_modules 是通过下列的一些变量返回信息。

1
2
3
4
5
6
7
8
<PREFIX>_FOUND          # 返回是否找到 package
<PREFIX>_LIBRARIES # 返回 package 的名称, 可以用到 ld 上 -lpackage
<PREFIX>_LIBRARY_DIRS # 返回 package 的库名文件夹名, 可以用于 ld 戓 gcc 的 -L 标记。
<PREFIX>_LDFLAGS # 返回所有的连接的必要标记。
<PREFIX>_LDFLAGS_OTHER # 返回其它的连接标记
<PREFIX>_INCLUDE_DIRS # 返回头文件所在文件夹, 可以用在 gcc -I 标记后。
<PREFIX>_CFLAGS # 返回所有必要的 CFLAGS。
<PREFIX>_CFLAGS_OTHER # 返回其它的 CFLAGS。

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

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

请求 glib2 和 gtk2, 会定义出如下变量 ${ FOO_glib-2.0_VERSION} 其值为 2.10.3 和 ${ FOO_gtk+-2.0_VERSION} 其值为 2.8 等。FOO_glib-2.0_LIBRARIES=glib2-0;**FOO_glib_STATIC_LIBRARIES=**;**


2018-06-02 cmake 的 pkg-config 使用问题。
https://www.supermew.top/2018/06/02/cmake-的-pkg-config-使用问题。/
作者
八月
发布于
2018年6月2日
许可协议