https://blog.csdn.net/weixin_44705391/article/details/122730294
需要依赖的环境:m4(宏处理工具),perl(脚本语言库)(自行安装即可)
autotools流程:
扫描->宏展开->生成config->(生成config head文件)->makefile
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//由以下步骤可得到configure:[]中的内容是可有可无的
source files-->[autoscan*]-->[configure.scan]-->configure.ac //或者configure.in
configure.ac--.
| .------->autoconf*---->configure
[aclocal.m4]--+---+ //aclocal.m4文件由以下步骤生成
| `----->[autoheader*]-->[config.h.in]
[acsite.m4]---'
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//由以下两个步骤可得到aclocal.m4和Makefile.in作为生产configure.ac和makefile的原料
[acinclude.m4]--.
|
[local macros]--+-->aclocal*-->aclocal.m4
|
configure.ac----'
configure.ac--.
+-->automake*-->Makefile.in
Makefile.am---' //此文件是自己写的
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Makefile.in通过运行configure脚本生成makefile
.-------->[config.cache]
configure*----------+-------->config.log
|
[config.h.in]-. v .->[config.h]-.
+-->config.status*-+ +-->make*
Makefile.in---' '->Makefile---'
//文件加工过程
source files----->configure.ac-->configure--.
|-->[aclocal.m4]-------^ |-->Makefile
'--> Makefile.in -------------'
命令 | 描述 | 生成文件 |
---|---|---|
autoscan | 扫描源代码目录生成configure.scan文件 | configure.scan包含系统配置的基本选项,里面都是宏定义,需要将其改为configure.in |
aclocal | 是一个perl脚本程序,aclocal根据configure.in的内容生成aclocal.m4。 | aclocal.m4是宏展开文件 |
autoconf | 用来产生configure文件 | configure.in的宏经过autoconf处理后变成检查系统特性、环境变量、软件必须的参数的shell脚本 |
autoheader | 自动生成config.h.in | config.h.in用于生成config.h |
automake | automake-add-missing 来产生makefile.in | makefile.am用于生成makefile.in,需要手写 |
一个典型的工作过程:
注意不能放在VM Ware的共享目录中,不然链接的时候会报错
1)autoscan:
生成文件:
autoscan.log configure.scan
autoscan.log是日志文件我们不关心
configure.scan包含一些宏,其中的有些内容需要我们修改:
AC_PREREQ([2.69])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([main.c])
AC_CONFIG_HEADERS([config.h])
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header files.
AC_CHECK_HEADERS([stdlib.h])
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_OUTPUT
1.以上的AC_INIT没有配置,需要加上最终可执行程序的名字,修改形如:
AC_INIT(be_rich,1.0,qwertyuiop@mail.com)
2.我们可以不要config.h,那么先将AC_CONFIG_HEADERS([config.h])屏蔽掉
3.AC_OUTPUT最终生成makefile文件:
AC_OUTPUT(Makefile)
4.添加一个宏:AM_INIT_AUTOMAKE,,表示我们用automake来生成文件:
AM_INIT_AUTOMAKE(be_rich,1.0)
我们可以在https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.71/autoconf.html文档中查找有关的宏,学习宏的用法
2)将configure.scan改成configure.ac
3)执行aclocal生成aclocal.m4文件
4)执行autoconf生成configure
5)创建Makefile.am文件
其内容可以参考:https://www.gnu.org/software/automake/manual/automake.html的4.1
也可以man automake来学习automake
参考4.1的内容:
bin_PROGRAMS = zardoz //我们要命名的程序
zardoz_SOURCES = main.c head.c float.c vortex9.c gun.c //源码
zardoz_LDADD = $(LIBOBJS) //库路径
info_TEXINFOS = zardoz.texi
我们编辑Makefile.am内容为:
bin_PROGRAMS = be_rich
be_rich_SOURCES = main.c
6)新建NEWS、README、AUTHORS、ChangeLog文件
为了automake的规范,在工程中添加这些共文件
6)执行automake --add-missing
8)执行./configure得到Makefile
9)执行make、make install、make dist等命令
执行make dist会生成一个压缩包,这个压缩包就可以放到网络上供人下载使用。