分类: LINUX
2012-12-24 23:09:18
主要步骤:
1.开发者要书写的文件主要是configure.in和Makefile.am
2.运行autoscan检测源文件生成configure.scan并修改成configure.in
3.编辑configure.in
4.由aclocal命令生成aclocal.m4
5.运行autoconf生成configure脚本
6.运行autoheader生成config.h.in文件
7.创建并编辑Makfile.am
8.运行automake生成makefile.in 有时候要加automake --add-missing,这很重要哦
9.运行configure脚本生成Makefile
10.make
11.运行可执行程序main
简单-同一个目录(不同目录见《autotools生成Makefile(二)》)
1.写好源码main.c hello.c hello.h
[root@localhost 1]# ls
hello.c hello.h main.c
[root@localhost 1]# cat main.c
#include
int main(void)
{
printf("main start!\n");
print();
return 0;
}
[root@localhost 1]# cat hello.c
#include "hello.h"
void print(void)
{
char buf[32] = "123";
strcat(buf, "456");
printf("%s\n", buf);
printf("hello,world!\n");
return ;
}
[root@localhost 1]# cat hello.h
#ifndef __HELLO_H__
#define __HELLO_H__
#include
#include
void print(void);
#endif
2.执行命令:autoscan
[root@localhost 1]# autoscan
autom4te: configure.ac: no such file or directory
autoscan: /usr/bin/autom4te failed with exit status: 1
[root@localhost 1]# ls
autoscan.log configure.scan hello.c hello.h main.c
3.编辑configure.scan
[root@localhost 1]# vim configure.scan
//只增加这2项:
AM_INIT_AUTOMAKE(main, 1.0)
AC_OUTPUT(Makefile)
[root@localhost 1]# mv configure.scan configure.in
4.aclocal
[root@localhost 1]# aclocal
[root@localhost 1]# ls
aclocal.m4 autoscan.log hello.c main.c
autom4te.cache configure.in hello.h
5.autoconf
[root@localhost 1]# autoconf
[root@localhost 1]# ls
aclocal.m4 autoscan.log configure.in hello.h autom4te.cache configure hello.c main.c
6.autoheader
[root@localhost 1]# autoheader
[root@localhost 1]# ls
aclocal.m4 autoscan.log configure hello.c main.c autom4te.cache
config.h.in configure.in hello.h
7.用vi编辑makefile.am文件,编辑如下,编辑完后保存退出
[root@localhost 1]# vi Makefile.am //注意:不是makefile-即M应为大写
AUTOMAKE_OPTIONS= foreign //软件等级
bin_PROGRAMS= main //可执行文件名
main_SOURCES= main.c hello.c //源文件名
8.automake + automake --add-missing
[root@localhost 1]# automake
configure.in: required file `./install-sh' not found
configure.in: required file `./missing' not found
Makefile.am: required file `./depcomp' not found
[root@localhost 1]# automake --add-missing
configure.in: installing `./install-sh'
configure.in: installing `./missing'
Makefile.am: installing `./depcomp'
[root@localhost 1]# ls
depcomp install-sh missing
9.运行configure
生成 Makefile config.log config.status
10.make生成可执行文件main
11.运行main
[root@localhost 1]# ./main
main start!
123456
hello,world!
需要编辑的二个主要文件
configure.in :
AC_PREREQ(2.59)
AC_INIT(hello,1.0,yangzongde@163.com) //在此行内容中设置当前软件包信息
AM_INIT_AUTOMAKE(main,1.0) //automake 所必备的宏,必须添加
AC_CONFIG_SRCDIR([hello.c]) //源文件名
AC_CONFIG_HEADER([config.h]) //config 文件
# 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_OUTPUT(Makefile) //输出文件名为 makefile
分析:
(1)AC_PREREQ 宏声明本文件要求的 autoconf 版本,本例使用的版本为 2.59。
(2)AC_INIT 宏用来定义软件的名称和版本等信息,"FULL-PACKAGE-NAME"为软件包名称,"VERSION"为软件版本号,"BUG-REPORT-ADDRESS"为 BUG 报告地址 (一般为软件作者邮件地址)。
(3)AC_CONFIG_SRCDIR 宏用来侦测所指定的源码文件是否存在,来确定源码目录的有效性。此处为当前目录下的 hello.c。
(4)AC_CONFIG_HEADER 宏用于生成 config.h 文件,以便 autoheader 使用。
(5)AC_PROG_CC 用来指定编译器,如果不指定,选用默认 gcc。
(6)AC_OUTPUT 用来设定configure 所要产生的文件,如果是 makefile,configure 会把它检查出来的结果带入 makefile.in 文件产生合适的 makefile。
使用 Automake 时,还需要一些其他的参数,这些额外的宏用 aclocal 工具产生。 中间的注释可以分别添加用户测试程序、测试函数库和测试头文件等宏定义。
此文件只是下面要使用的 configure.ac 文件的原型,要使用此文件,还需要根据情况修改相关内容。
(7)AM_INIT_AUTOMAKE(PACKAGE,VERSION) 这个是使用 Automake 所必备的宏,PACKAGE 是所要产生软件套件的名称,VERSION 是版本编号。
Makefile.am