附录A_GLib库入门与实践_本系列文章附带源码简介

本系列文章包含了230多个示例程序,为了组织这些源码(点击下载),使用CMake构建工具建立CMake工程以对其进行管理。现以glib_markup和glib_regex两个功能模块为例,讲解如何使用附带源码,以及如何基于本CMake工程添加新的模块。
有些示例为错误示例,在文章中会特别说明,错误示例的源码目录也一般以_err结尾。所有正确的示例代码均在CentOS7.6 x86_64平台上编译通过,且通过valgrind工具检查,无内存泄露。

附带源码下载地址

https://download.csdn.net/download/field1003/84948172

附带源码目录结构简介
glib_examples
├── CMakeCommonFile.txt
├── CMakeCustomCommonFile.txt
├── CMakeLists.txt
├── compile_and_exec_all_examples.sh
├── glib_markup
│   ├── CMakeLists.txt
│   ├── glib_markup_basic
│   │   ├── CMakeLists.txt
│   │   ├── glib_markup_xml_parser.c
│   │   └── xml_basic.xml
│   └── glib_markup_element
│       ├── CMakeLists.txt
│       ├── glib_markup_get_element.c
│       └── xml_element.xml
└── glib_regex
    ├── CMakeLists.txt
    ├── glib_regex_replace
    │   ├── CMakeLists.txt
    │   └── glib_regex_replace_some_string.c
    └── glib_regex_string_split
        ├── CMakeLists.txt
        └── glib_regex_string_split.c

源码根目录下有三个CMake*文件和一些功能模块目录。
三个CMake*文件分别是CMakeCommonFile.txt、CMakeCustomCommonFile.txt和CMakeLists.txt(这三个文件的内容见附录B)。

  • CMakeCommonFile.txt会被所有CMakeLists.txt引用,该文件里面包括了GLib库头文件和库文件的路径。
  • CMakeCustomCommonFile.txt包含了一些命令,如果在编译时需要额外做一些工作,则需要引用该文件。举例来说,glib_markup功能下的所有功能,都需要解析一个xml文件,该xml文件需要放到编译出的二进制同级目录下,这个时候就需要实现一个函数,在编译二进制时把xml文件拷贝到同级目录下。
  • CMakeLists.txt是CMake通用文件。

compile_and_exec_all_examples.sh文件是批量编译和执行所有功能模块的脚本文件,设置好GLib-2.0库头文件路径及链接库路径后,执行该脚本,会编译所有的示例程序并自动执行。

源码根目录下的功能模块目录有很多,这里只列举其中的两个,如glib_markup是用来解析xml的,glib_regex是正则表达式相关。在各功能模块目录下,都有一个CMakeLists.txt文件和一些子功能模块,每一个子功能模块都是一个或一组功能点的演示。每一个子功能模块下,都有一个CMakeLists.txt文件和一些*.c/*.cpp/*h/*.hpp文件,有些子功能模块还有额外的辅助文件。

附带源码使用帮助
源码编译前的准备工作

本系列文章附带的源码依赖GLib-2.0库(版本为2.56.4),因此要求运行环境中必须已经安装GLib-2.56.4库,否则就要先拿到源码并编译GLib-2.56.4。
编译安装完GLib-2.56.4,在CMakeCommonFile.txt文件配置好GLib-2.0库的头文件路径及链接库路径,如果使用系统的动态库,不需要指定链接库路径。
需要设置的字段如下所示:

##############################################################
###### BEGIN: Use System GLib library
SET(GLIB_INCLUDE_DIR "/usr/include/glib-2.0")
SET(GLIB_CONFIG_INCLUDE_DIR "/usr/lib64/glib-2.0/include")
## No Need To Set LINK_DIRECTORIES()
###### END: Use System GLib library

###### BEGIN: Use Custom GLib library
#SET(GLIB_INCLUDE_DIR "/opt/glib-2.56.4/include/glib-2.0")
#SET(GLIB_CONFIG_INCLUDE_DIR "/opt/glib-2.56.4/lib/glib-2.0/include")
#LINK_DIRECTORIES(/opt/glib-2.56.4/lib)
###### END: Use Custom GLib library
##############################################################
示例代码的cmake方式编译

配置好GLib-2.0库的头文件路径及链接库路径后,可以以下面任意一种方式编译示例源代码程序。

  • 在功能模块目录(如glib_regex)下执行cmake可以编译出该功能模块下所有子功能模块。
  • 在子功能模块目录(如glib_regex_replace)下执行cmake可以编译出当前子功能模块。
  • 子功能模块目录下可以有多个*.c/*.cpp/*h/*.hpp文件,生成的二进制文件名与子功能模块目录名相同。
  • 如果想在功能模块下新增一个子功能模块,可以先复制一个同级的子功能模块目录,修改一下目录名,里面的CMakeLists文件可以直接复用,只需要自行实现c文件即可。
  • 如果想新增一个功能模块,也可以先复制一个同级的功能模块目录,修改一下目录名,里面的CMakeLists文件可以直接复用,注意功能模块下没有c文件。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值