自动化编译工具(autotools系列工具)使用实例
来源:互联网 发布:python 遍历json数组 编辑:程序博客网 时间:2024/06/06 08:50
1. 引言
我们在学习和使用很多开源软件的时候,会发现其源码中并不总是有现成的configure文件和makefile文件,而是需要先执行一个安装脚本。例如,SOHO-DBproxy中,使用build.sh完成编译安装:
sh autogen.shbash ./configure --prefix=${MYSQL_PROXY_INSTALL_PATH} --with-mysql=${MYSQL_INSTALL_PATH}/bin/mysql_configmake && make install && mkdir -p ${MYSQL_PROXY_INSTALL_PATH}/var/log && \cp -r ./etc ${MYSQL_PROXY_INSTALL_PATH}/etc && chmod 600 ${MYSQL_PROXY_INSTALL_PATH}/etc/mysql-proxy.cnf我们看到,其在运行configure之前先调用了aotugen.sh。这里面的内容就是本文要讲的,自动化编译工具GNU autoconf 和 automake。
2. 工具简介
软件环境:autoconf/automake/m4/perl/libtool
autoconf:生成自动配置的源码包,依赖于m4
automake:依赖Makefile.am生成Makefile.in,需要使用到perl
libtool:用于生成各种工具库
目前automake支持三种目录层次:
flat:源文件、库文件等都在同一目录
shallow:主要源文件在顶层,其余文件在底层
deep:顶层不包含源代码,主要代码都在底层文件夹中
3.使用实例
首先我们看一下流程图
下面以自己写的一段代码为例,生成相应的makefile:
Step 1. autoscan 生成 configure.scan
# -*- Autoconf -*-# Process this file with autoconf to produce a configure script.AC_PREREQ([2.68])AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])AC_CONFIG_SRCDIR([weather_log.h])AC_CONFIG_HEADERS([config.h])AM_INIT_AUTOMAKE(test,1.0) //这里是需要自己添加的,与AC_INIT内容相似,可自定义# Checks for programs.AC_PROG_CXXAC_PROG_CC# Checks for libraries.# FIXME: Replace `main' with a function in `-levent':AC_CHECK_LIB([event], [-levent])# FIXME: Replace `main' with a function in `-ljsoncpp':AC_CHECK_LIB([jsoncpp], [-ljsoncpp])# FIXME: Replace `main' with a function in `-llog4cplus':AC_CHECK_LIB([log4cplus], [-llog4cplus])# FIXME: Replace `main' with a function in `-lmemcached':AC_CHECK_LIB([memcached], [lmemcached])# FIXME: Replace `main' with a function in `-lmysqlclient':AC_CHECK_LIB([mysqlclient], [-lmysqlclient])# FIXME: Replace `main' with a function in `-lpthread':AC_CHECK_LIB([pthread], [lpthread])# FIXME: Replace `main' with a function in `-lrt':AC_CHECK_LIB([rt], [-lrt])# Checks for header files.AC_CHECK_HEADERS([malloc.h stdlib.h string.h unistd.h wchar.h])# Checks for typedefs, structures, and compiler characteristics.AC_HEADER_STDBOOLAC_C_INLINEAC_TYPE_INT32_TAC_TYPE_SIZE_TAC_TYPE_UINT32_T# Checks for library functions.AC_FUNC_ERROR_AT_LINEAC_FUNC_MALLOCAC_FUNC_MKTIMEAC_FUNC_STRTODAC_CHECK_FUNCS([bzero gettimeofday memmove memset strerror strtol])AC_CONFIG_FILES([Makefile])AC_OUTPUT
Step 2. aclocal 生成aclocal.m4
这个文件基本不需要我们参与,这里就不贴了
Step 3. autoconf生成configure文件
这个文件我没有用到过,所以也不贴了。。。
到这里,流程图中一条分支就已经完成了,下面我们开始完成另一条分支。
Step 4. Makefile.am的编写
AUTOMAKE_OPTIONs = foreign // 软件等级,foreign、gnu、gnits,默认为gnubin_PROGRAMS = test // 可执行文件名,若这里有多个,可以用空格隔开test_SOURCES = convert_utf.c convert_utf.h simple_ini.h weather_application.cpp weather_application.h weather_configure.cpp weather_configure.h weather_log.cpp weather_log.h weather_main.cpp weather_memclient.cpp weather_memclient.h weather_mysql.cpp weather_mysql.h weather_query_now.cpp weather_query_now.h //这里必须把所有用到的文件都写进来INCLUDES = -I /data/publiclib/libmemcached/include -I/usr/local/mysql-old/include/mysql/ -I/data/publiclib/libevent/include/ -I/data/publiclib/jsoncpp/include -I/data/publiclib/log4cplus/include/ //头文件所在目录test_LDADD = -L/data/publiclib/libmemcached/liba -L/data/publiclib/log4cplus/lib -L/data/publiclib/jsoncpp/liba -L/usr/lib64/mysql/ -L/data/publiclib/libevent/liba //依赖库检索路径LIBS = -levent -llog4cplus -lmemcached -lmysqlclient -ljsoncpp -lrt -lpthread -std=c++98 //依赖库,也可以通过configure.in中的<pre name="code" class="cpp">AC_CHECK_LIB实现每个变量的含义请大家参照上面的注释。
Step 5. autoheader 生成 config.h.in
没有这一步下面会报错
Step 6. automake生成Makefile.in
这里需要注意的是,执行automake 要加参数 --add-missing,这里会为你生成很多文件,最重要的当然是Makefile.in
Step 7. 执行./configure && make && make install
到这里我们的程序就编译成功了,你会发现一个可执行文件test
4.Makefile.am的编写
从上面我们可以看出,整个过程中需要我们参与的基本就是一个Makefile.am的编写,下面这篇文章个人觉得写得挺好的,像我一样的伸手党可以看一下,我就不复制粘贴了:
http://www.ibm.com/developerworks/cn/linux/l-makefile/
- 自动化编译工具(autotools系列工具)使用实例
- 使用autotools系列工具自动部署源代码编译安装
- autotools系列工具作用
- GNU自动化工具链autotools
- autotools工具使用
- autotools工具使用
- autotools工具使用
- 如何使用autotools工具
- 使用autoTools工具集
- autotools工具使用
- autotools工具使用
- AutoTools工具的使用
- Ubuntu安装autotools系列工具
- 简单实例学习autotools工具
- 使用autotools工具搭建工程
- autotools工具介绍和使用
- automake - 使用 autotools 工具集
- fedora自动化编译autotools的使用
- Hadoop-2.5.2集群安装配置详解
- 设置Linux用户无口令登陆方式
- Visual Studio 常用比较好的插件
- arm 指令
- Axure新手入门资料集:教你快速设计原型
- 自动化编译工具(autotools系列工具)使用实例
- 稀低照度依据
- Sql server字符串实现自动增长
- 12.1.2 在 C# 中使用迭代器
- Ubuntu 设置环境变量
- Working with the Central Workload Monitor
- Linux-发展简史与如何学习
- 命令模式--command模式
- 8种经典排序算法总结