Autotool使用

利用autotool系列工具生成makefile

今天学习了linux中利用autotool系列工具生成makefile,下面简要的做一下总结:

Makefile是干什么的?

makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,其中也可以执行操作系统的命令。

makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。还有一个好处就是,一旦某个文件被修改了,再对工程编译时候,不用编译所有的文件,编译工具会根据makefile判断哪个文件被修改了,只编译与它有关的文件。

而手动编写makefile很繁,所以autotools就应运而生,它可以实现makefile的自动生成

autotools的使用流程

autoscan->aclocal->autoconf-> automake->configure

以helloworld为例加以说明:

1)新建helloworld.c,并修改代码如下:

#include <stdio.h>

int main(int argc,char** argv){

        printf("hello world!"Autotool使用 - everysmile - everysmile的博客;

        return 0;

   }

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)automake --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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值