今天学习了linux中利用autotool系列工具生成makefile,下面简要的做一下总结:
Makefile是干什么的?
makefile定义了一系列的规则来指定,哪些文档需要先编译,哪些文档需要后编译,哪些文档需要重新编译,甚至于进行更复杂的功能操作,其中也能够执行操作系统的命令。
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件研发的效率。更有一个好处就是,一旦某个文档被修改了,再对工程编译时候,不用编译任何的文档,编译工具会根据makefile判断哪个文档被修改了,只编译和他有关的文档。
而手动编写makefile很繁,所以autotools就应运而生,他能够实现makefile的自动生成
autotools的使用流程
autoscan->aclocal->autoconf-> automake->configure
以helloworld为例加以说明:
1)新建helloworld.c,并修改代码如下:
int main(int argc,char** argv)
{
printf("hello world!");
}
2)autoscan:autoscan:生成configure.scan
3)编辑configure.scan,并重命名为configure.in
内容如下:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
#The next one is modified by sunq
#AC_INIT(FULL-PACKAGE-NAME,VERSION,BUG-REPORT-ADDRESS)
AC_INIT(hello,1.0)
# The next one is added by author
AM_INIT_AUTOMAKE(hello,1.0)
AC_CONFIG_SRCDIR([hello.c])
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
4)aclocal:生成aclocal.m4
5) autoconf:生成configure
6)vim makefile.am:新建makefile.am并编辑内容如下:
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=helloworld
helloworld_SOURCES=helloworld.c
7)atuomake --add-missing:生成makefile.in
8)./configure:生成makefile
这样helloworld的makefile就生成了,make就可生成可执行程式了。
autotools各步详解:
1.autoscan
他会在给定目录及其子目录树中检查源文档,若没有给出目录,就在当前目录及其子目录树中进行检查。他会搜索源文档以寻找一般的移植性问题并创建一个文档“configure.scan”,他是“configure.in”的原型文档.
2.configure.in
configure.in是autoconf的脚本配置文档,文档的内容是一些宏,这些宏经过autoconf 处理后会变成检查系统特性、环境变量、软件必须的参数的shell脚本。configure.in文档中的宏的顺序并没有规定,但是您必须在任何宏的最前面和最后面分别加上AC_INIT宏和AC_OUTPUT宏。其中:
1)以“#”号开始的行为注释。
2)AC_PREREQ宏声明本文档需要的autoconf版本,如本例使用的版本2.59。
3) AC_INIT宏用来定义软件的名称和版本等信息,在本例中省略了BUG-REPORT-ADDRESS,一般为作者的e-mail。
4)M_INIT_AUTOMAKE是笔者另加的,他是automake所必备的宏,也同前面相同,PACKAGE是所要产生软件套件的名称,VERSION是版本编号。
5)AC_CONFIG_SRCDIR宏用来侦测所指定的源码文档是否存在,来确定源码目录的有
效性。在此处为当前目录下的hello.c。
6)AC_CONFIG_HEADER宏用于生成config.h文档,以便autoheader使用。
7)AC_CONFIG_FILES宏用于生成相应的Makefile文档。
4.aclocal
他生成一个“aclocal.m4”文档,该文档主要处理本地的宏定义。
5.autoconf
生成“configure”shell文档。configure是个脚本,他能配置源程式来适应各种不同的操作系统平台,并且根据不同的系统来产生合适的Makefile,从而能够使您的源代码能在不同的操作系统平台上被编译出来。
6.makefile.am
· 其中的AUTOMAKE_OPTIONS为配置automake的选项。由于GNU对自己发布的软件有严格的规范,比如必须附带许可证声明文档COPYING等,否则automake执行时会报错。automake提供了三种软件等级:foreign、gnu和gnits,让用户选择采用,默认等级为gnu。在本例使用foreign等级,他只检测必须的文档。
· bin_PROGRAMS定义要产生的执行文档名。假如要产生多个执行文档,每个文档名用空格隔开。
· hello_SOURCES定义“hello”这个执行程式所需要的原始文档。假如”hello”这个程式是由多个原始文档所产生的,则必须把他所用到的任何原始文档都列出来,并用空格隔开。例如:若目标体“hello”需要“hello.c”、“sunq.c”、“hello.h”三个依赖文档,则定义hello_SOURCES=hello.c sunq.c hello.h。要注意的是,假如要定义多个执行文档,则对每个执行程式都要定义相应的file_SOURCES。
7.automake - -add-missing
生成“makefile.in”文档,在这里使用选项“—adding-missing”能够让automake自动添加有一些必需的脚本文档。
8.运行configure
在这一步中,通过运行自动配置配置文档configure,把Makefile.in变成了最终的Makefile。
本文来自ChinaUnix博客,假如查看原文请点:http://blog.chinaunix.net/u2/63273/showart_511519.html
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




