Autotools使用教程

一、包含的工具

aclocal
autoscan
autoheader
automake
autoconf

二、命令使用流程图

这里写图片描述
使用autotools主要就是利用各个工具的脚本文件以生成最后的Makefile。其总体流程是这样的。
• 使用aclocal生成一个“aclocal.m4”文件,该文件主要处理本地的宏定义;
• 改写“configure.scan”文件,并将其重命名为“configure.in”,并使用autoconf 文件生成configure文件。

三、实例

1.准备工作

a.建立两个文件夹include,src(include里面放置头文件,src中放置源文件)

#mkdir include src

b.编写程序

#vim include/pr.h
int pr()
{
    printf(“helloworld”);
    return 0;
}
#vim src/hello.c
#include <stdio.h>
#include “pr.h”
int main()
{
    int x;
    x=pr();
    return 0;
}

这里写图片描述

2.执行

a. autoscan
生成 configure.scan

//configure.scan文件内容(红色部分是注释和新增的 用于生成configure.ac)
1. # -- Autoconf --
2. # Process this file with autoconf to produce a configure script.
3. AC_PREREQ([2.59]) //使用的autoconf版本号
4. AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS]) //FULL-PACKAGE-NAME
为程序名称,VERSION为当前版本,BUG-REPORT-ADDRESS为bug汇报地址(一般写作者邮箱)
5. AM_INIT_AUTOMAKE([ir_tree],[1.0]) //指示可执行名称+版本号,用于生成makefile
6. AC_CONFIG_SRCDIR([src/hello.c]) //用来侦测所指定的源码文件是否存在,你可以检测所有的文件,这里为了示意,检查一个
7. AC_CONFIG_HEADER([config.h]) //检测头文件是否存在,用于生成config.h文件,以便autoheader 使用
8.# Checks for programs.
9. AC_PROG_CC // # 检验gcc是否存在,如果你是要的C++,那么AC_PROG_CXX,所有你需要什么,到uanfang手册去查找就OK了!
10. # Checks for libraries.
11.#AC_CHECK_LIB([m],[sqrt])//检查数学库-lm,这里我们没用其实AC_CHECK_LIB的完整格式是AC_CHECK_LIB([lib],[func],[if_exist_action], [not_exist_action]),后面的func是你使用到的函数名
12. #AC_PROG_RANLIB //当你使用了静态库的时候,需要这一句;如果你使用了共享库,那么使用AC_PROG_LIBTOOL
13. # Checks for header files.
14. # Checks for typedefs, structures, and compiler characteristics.
15. # Checks for library functions.
16. AC_CONFIG_FILES([Makefile]) //用于生成相应的Makefile 文件。
17. AC_OUTPUT

修改 configure.scan  重命名为configure.ac 并修改
这里只增加了两行,用于生成makefile文件,
AM_INIT_AUTOMAKE([ir_tree],[1.0])
AC_CONFIG_FILES([Makefile])
这里写图片描述

b. aclocal
由文件configure.ac生成aclocal.m4文件以及autom4te.cache文件夹

c. autoheader
由文件configure.ac 生成 config.h.in文件

d. 编写Makefile.am文件

#Makefile.am AUTOMAKE_OPTIONS=foreign // automake提供了3 种软件等级:foreign、gnu和gnits,让用户选择采用,默认等级为gnu。在本例使用foreign等级,它只检测必须的文件。
bin_PROGRAMS= hello //定义要产生的执行文件名。如果要产生多个执行文件,每个文件名用空格隔开
hello_SOURCES= include/pr.h src/hello.c //定义“hello”这个执行程序所需要的原始文件。
hello_CPPFLAGS = -I include/ //添加头文件目录(重要的)

这里写图片描述

e. automake
automake必须要以下文件
这里写图片描述
用automake –a可以自动生成以下文件
这里写图片描述
所以要手动生成以下文件

#touch NEWS README AUTHORS ChangeLog

也可以使用automake –add-missing让automake自动添加有一些必需的脚本文件。

运行automake –a
生成Makefile.in

f. autoconf
由configure.ac aclocal.m4生成configure

g. ./configure
生成Makefile和config.h

f. make
make dist(生成安装包)

四、总结

1 autoscan
2 mv configure.scan configure.ac
3 在configure.ac 中修改
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS]) //FULL-PACKAGE-NAME 为程序名称,VERSION为当前版本,BUG-REPORT-ADDRESS为bug汇报地址(一般写作者邮箱)
AC_CONFIG_SRCDIR([src/hello.c]) //用来侦测所指定的源码文件是否存在,你可以检测所有的文件,这里为了示意,检查一个
添加:
AM_INIT_AUTOMAKE([ir_tree],[1.0])
AC_CONFIG_FILES([Makefile])
4 aclocal
5 autoheader
6 autoconf
7 制作Makefile.am
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS= hello
hello_SOURCES= include/pr.h src/hello.c
hello_CPPFLAGS = -I include/
8 touch NEWS README AUTHORS ChangeLog
automake –a
9 ./configure
10 make

猜你喜欢

转载自blog.csdn.net/thalo1204/article/details/49183911