位置: 编程技术 - 正文

用Autoconf检测MySQL软件包的教程

编辑:rootadmin

推荐整理分享用Autoconf检测MySQL软件包的教程,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

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

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

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

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

说明: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,那么如下代码生效):

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

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

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

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

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

小结:上面两种方法一个需要修改Makefile.am、一个需要修改头文件,可以根据个人喜好来决定怎么做。3. 更多关于ax_lib_mysql.m4的使用常见的configure写法

用Autoconf检测MySQL软件包的教程

有了上面的设置,程序就可以通过如下的方式来确定是否将MySQL客户端的支持编译到源代码中: 如果对最低版本有要求

另外,如果你对MySQL版本有要求,例如,你希望只有检测到5.5以上的MySQL客户端,才编译对MySQL的支持,则可以在configure.ac中这样使用AX_LIB_MYSQL:AX_LIB_MYSQL(5.5.)修改--with-mysql的默认行为

这里意思是说,如果在configure中没有--with-mysql选项时,则编译时不加上对MySQL的支持(如果写了),也就是说如下两种写法意思相同:

ax_lib_mysql.m4的默认行为并非如此,需要对其代码做小小的修改:

这样就如愿了。4. 更一般的DEBUG选项

其实使用Autoconf这种用法更一般的是开启或者关闭DEBUG选项。这个实现会比上面简单很多。

目标:编译时,根据configure参数(如果有--enable-debug),则执行程序中#ifdef DEBUG ... #endif。(经常看到这样的写法吧)

相比上面的--with-mysql这个就简单多了(没有版本信息、不需要找mysql_config等),所以实现也简单多了,只需在你的configure.ac中新增如下代码:

如果configure时,带有参数--enable-debug,则设置调用AM_CONDITIONAL设置遍历DEBUG。这样就可以在Makefile中根据遍历DEBUG,来选择性的新增编译参数-DDEBUG,所以配套的还需要再Makefile.am中新增:

这时,你的代码中就可以写#ifdef DEBUG ... #endif了。

另一种包含config.h的方法跟前面类似,只不过需要将AM_CONDITIONAL那里换成:

那么程序代码中include >config.h<就可以了。

使用mysqladmin检测MySQL运行状态的教程 mysqladmin是MySQL一个重要的客户端,最常见的是使用它来关闭数据库,除此,该命令还可以了解MySQL运行状态、进程信息、进程杀死等。本文介绍一下如何

防止服务器宕机时MySQL数据丢失的几种方案 对于多数应用来说,MySQL都是作为最关键的数据存储中心的,所以,如何让MySQL提供HA服务,是我们不得不面对的一个问题。当master当机的时候,我们如

从底层简析Python程序的执行过程 最近我在学习Python的运行模型。我对Python的一些内部机制很是好奇,比如Python是怎么实现类似YIELDVALUE、YIELDFROM这样的操作码的;对于递推式构造列表(Lis

标签: 用Autoconf检测MySQL软件包的教程

本文链接地址:https://www.jiuchutong.com/biancheng/347698.html 转载请保留说明!

上一篇:查找MySQL线程中死锁的ID的方法(mysql在查询结果中查询)

下一篇:使用mysqladmin检测MySQL运行状态的教程(mysqladmin ping)

  • 海产品的增值税税率是多少
  • 应交税费转结哪里去
  • 已抵扣的进项税额怎么转出
  • 提成过高
  • 金税四期什么时候全国运行
  • 注册公司工贸和商贸区别
  • 当月出租设备需要发票吗
  • 跟个人租车可以到税务局开发票吗
  • 租入住房用于职工福利,进项转出吗?
  • 销售货物分期付款怎么确认收入
  • 应收账款融资的优缺点
  • 报销退回多余款项怎么开收据
  • 捐赠出的资产如何处理
  • 母子公司往来款属于借款吗
  • 收到厂家返利如何做账
  • 钱汇错需要退回应该怎么做分录?
  • 预提退货实际发生时账务处理
  • 如何查询分公司开户行
  • 完税凭证和纳税凭证区别
  • 增值税抵扣进项税额交税账务处理
  • 开票的时候如何把价格分散开
  • 小规模纳税人领发票要带什么
  • 房屋贷款基准利率表 历年查询
  • 员工垫付差旅费 民间借贷
  • 中国每年森林火灾造成的损失
  • 已收发票是什么意思
  • 安装支付设备工作怎么样
  • 运费结转成本的计算公式
  • 股东变更需要提交的资料
  • 药品推广服务费怎么开票
  • 电子税务局变更办税人员怎么操作
  • env文件夹是什么文件
  • 买车的收费项目详细清单
  • MacOS X Yosemite升级后postgresql启动报错的解决办法
  • 惠普2600打印机故障排除
  • 月末结转营业税金及附加分录
  • fsmb32.exe是什么进程 作用是什么 fsmb32进程查询
  • PHP:Memcached::cas()的用法_Memcached类
  • 债券到期收回本息计算单
  • php文件上传技术
  • vue中是如何划分的,每个区域的作用是什么
  • php解析base64数据生成图片的方法
  • 图像的傅里叶变换和离散余弦变换实验报告
  • 应付职工薪酬中社保费怎么记账
  • selenium python 教程
  • 金税盘怎么取消
  • 做账计提是什么意思
  • 企业送的购物卡怎么退回去
  • 自然人个税申报密码怎么获取
  • 金蝶财务软件库存商品数量金额再那查看
  • 股票股利怎么理解
  • 房地产企业印花税计入什么科目
  • 个体工商户需要给员工交社保吗
  • 事故赔偿金分配
  • 无票利息支出可抵税吗
  • 出口报关成功
  • 票据行为的构成要件
  • 医保账户收入金额是怎么算的
  • 购买原材料材料尚未验收入库,款项尚未支付
  • 园林土方施工有哪些分项工程
  • 怎么调整原材料的数量和单价
  • windows server core license
  • window8系统更新
  • win8如何到桌面
  • Win7系统打开D盘文件后怎么没有后退箭头
  • win8开始菜单变为win10
  • 为wdcp面板的lnmp服务器添加ipv6支持的方法介绍
  • js的上传文件
  • 安卓的系统设置在哪
  • linux那么多命令怎么记
  • shell 输出
  • javascript常用语法
  • 如何用python开发软件
  • 个体工商户税务年报网上怎么申报
  • 重庆市国家税务局电话
  • 江西省电子税务局登录入口
  • 车辆购置税大厅办理流程
  • 企业怎么成立工会组织
  • 国家税务总局2018年61号公告
  • 如何用微信进行社保认证
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设