在 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 模块:
看看我在 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})
我想在使用 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 模块:
看看我在 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})