将CMib2与CMake一起使用的推荐方法是什么?

mar*_*trz 10 glib cmake

我喜欢在我的C应用程序中使用GLib,它使用CMake作为构建系统.

现在,我在某种程度上混淆了如何在我的CMakeLists.txt中启用GLib.基本上,你使用find_package命令在cmake中添加库,所以我尝试了,根据这个 bug报告

find_package(GLib2)
Run Code Online (Sandbox Code Playgroud)

但没有找到任何东西.pkg-config另一方面,建议在GLib文档中使用.

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

Iva*_*van 7

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

find_package(PkgConfig REQUIRED)
pkg_check_modules(deps REQUIRED IMPORTED_TARGET gtk+-3.0)
target_link_libraries(target PkgConfig::deps)
Run Code Online (Sandbox Code Playgroud)

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


lib*_*rce 5

看看我在GTK 中使用 CMake 的答案

这与 GLib 几乎相同。


ble*_*ter 5

在您的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})
Run Code Online (Sandbox Code Playgroud)

  • OP 表示他正在链接一个应用程序,该应用程序通常是动态链接的目标。由于 GLib 是一个系统库,因此使用 INTERFACE 而不是 PUBLIC 可以避免在构建时链接到可能是静态版本的 Llib,而是将其写入动态依赖项并将其推迟到动态链接器。其中一些行为取决于构建时的系统配置。 (2认同)