首页 > 数据库 > MySQL > 正文

用Autoconf检测MySQL软件包的教程

2024-07-24 12:45:56
字体:
来源:转载
供稿:网友

在你的程序(或者工程)中,如果编译阶段需要检测当前环境中是否存在MySQL客户端相关的库文件时,你可以使用Autoconf来帮你完成这个工作,轻盈、优雅、无痛。阅读本文需要了解简单GNU Autoconf使用。
1. 本文的目标

目的:编译时,根据configure参数(如果有--with-mysql),选择性编译对应的MySQL相关的功能。

实现:使用已经写好的m4脚本:ax_lib_mysql.m4
2. 如何利用Autoconf实现

大部分你想到的事情都已经有人做过尝试了。这件事情也不例外,Autoconf中有很多脚本和指令帮你做事情。这里,需要使用ax_lib_mysql.m4来帮助我们。先把该文件放到程序/工程目录中,并在configure.ac中新增如下指令来检测MySQL库文件和版本:

复制代码 代码如下:
m4_include(ax_lib_mysql.m4)
AX_LIB_MYSQL()
AM_CONDITIONAL(BUILD_MYSQL_SUPPORT, test x$MYSQL_VERSION != x)

说明:AX_LIB_MYSQL()设置了三个变量,可以在Makefile.am中直接使用,分别是MYSQL_CFLAGS、MYSQL_LDFLAGS、MYSQL_VERSION,另外还会在config.h中预定义宏HAVE_MYSQL;AM_CONDITIONAL(...)则会根据是否需要开启MySQL支持,来设置变量BUILD_MYSQL_SUPPORT,这个变量可以在Makefile.am中使用。

在程序源代码中一般有两种方式可以获取HAVE_MYSQL宏的方式:一个是直接包含config.h;另一个是在你程序的CFLAGS中新增-DHAVE_MYSQL。(注意:有的变量是可以在Makefile.am中使用,有的则是可以在C源代码中使用)
方法一:直接include config.h

Autoconf工具会将所有的预定义宏存放在config.h(默认情况)中,并在编译器选项中新增-DHAVE_CONFIG_H(通过@DEFS@)。因为文件ax_lib_mysql.m4中,包含了如下代码(如果加上--with-mysql并且找到了对应mysql_config,那么如下代码生效):

复制代码 代码如下:
AC_DEFINE([HAVE_MYSQL], [1],
[Define to 1 if MySQL libraries are available])

所以,config.h中会有对应的宏定义:

复制代码 代码如下:
/* Define to 1 if MySQL libraries are available */
#define HAVE_MYSQL 1

在你的源代码中(一般是头文件),新增如下代码:

复制代码 代码如下:
#ifdef HAVE_CONFIG_H
#include >config.h<
#endif

这之后,就可以在你的源代码中,使用#ifdef HAVE_MYSQL ... #endif这样的写法了
方法二:编译器选项新增-DHAVE_MYSQL

因为文件ax_lib_mysql.m4包含了变量定义MYSQL_CFLAGS/MYSQL_LDFLAGS/MYSQL_VERSION,所以,简单的可以在Makefile.am中,直接根据这些变量来新增gcc编译参数。类似如下写法:
 

复制代码 代码如下:
if MYSQL_VERSION
XXX_CFLAGES= -DHAVE_MYSQL
endif

这之后,也可以在你的源代码中,使用#ifdef HAVE_MYSQL ... #endif这样的写法了

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表