在 CMake 中使用 GLib2 的推荐方法是什么

What is the recommended way of using GLib2 with CMake

我想在使用 CMake 作为构建系统的 C 应用程序中使用 GLib。

现在,我对如何在 CMakeLists.txt 中启用 GLib 感到困惑。基本上,您使用 find_package 命令在 cmake 中添加库,所以我尝试了,根据 this bugreport

find_package(GLib2)

但是什么也没找到。另一方面,在 GLib 文档中建议使用 pkg-config

在基于 cmake 的项目中启用 glib 的推荐方法是什么?

GLib(以及其他各种使用 autotools 的 C 库)提供了一个 pkg-config 文件来声明:

  • 编译器标志
  • 链接器标志
  • 构建时变量
  • 依赖关系

使用 CMake 发现这些库的位置的适当方法是使用 FindPkgConfig CMake 模块:

https://cmake.org/cmake/help/v3.0/module/FindPkgConfig.html

看看我在 using CMake with GTK

上的回答

与 GLib 几乎相同。

我一直在研究一些 CMake modules for GNOME (including one for GLib),您可能想尝试一下。基本上只要find_package(GLib),那么就可以用glib-2.0导入的target来link了。

在你的CMakeLists.txt中:

find_package(PkgConfig REQUIRED)
pkg_search_module(GLIB REQUIRED glib-2.0)
target_include_directories(mytarget PRIVATE ${GLIB_INCLUDE_DIRS})
target_link_libraries(mytarget INTERFACE ${GLIB_LDFLAGS})

自 CMake 3.6(2016 年 7 月发布)以来,pkg_check_modules 支持 IMPORTED_TARGET 参数,将依赖配置减少到单个 target_link_libraries 语句,它将处理所有必需的编译器和链接器选项:

find_package(PkgConfig REQUIRED)
pkg_check_modules(deps REQUIRED IMPORTED_TARGET glib-2.0)
target_link_libraries(target PkgConfig::deps)

(上面我使用了名称 deps 因为可以用一个 pkg_check_modules 语句列出多个依赖项)

另一个版本,多个答案的组合以及对我有用的东西(在 Linux 上)!

cmake_minimum_required(VERSION 2.6.4)
project(my_proj)

find_package(PkgConfig REQUIRED)
pkg_search_module(GLIB REQUIRED glib-2.0)

include_directories(${GLIB_INCLUDE_DIRS})
link_directories(${GLIB_LIBRARY_DIRS})

add_executable(my_proj main.c)

add_definitions(${GLIB_CFLAGS_OTHER})
target_link_libraries(my_proj ${GLIB_LIBRARIES})