1

整体流程

  1. 源码根目录调用autoscan脚本,生成configure.scan文件,然后将此文件重命名为configure.ac(或configure.in,早期使用.in后缀)

  2. 修改【configure.ac】,利用autoconf提供的各种M4宏,配置项目需要的各种自动化探测项目

  3. 编写【自定义宏】,建议每个宏一个单独的*.m4文件;

  4. 调用aclocal收集configure.ac中用到的各种非Autoconf的宏,包括自定义宏;

  5. 调用autoheader,扫描configure.ac(configure.in)、acconfig.h(如果存在),生成config.h.in宏定义文件,里面主要是根据configure.ac中某些特定宏(如AC_DEFINE)生成的#define和#undefine宏,configure在将根据实际的探测结果决定这些宏是否定义(具体见后面例子)。

  6. 按照automake规定的规则和项目的目录结构,编写一个或多个【Makefile.am】(Makefile.am数目和存放位置和源码目录结构相关),Makefile.am主要写的就是编译的目标及其源码组成。

  7. 调用automake,将每个Makefile.am转化成Makefile.in,同时生成满足GNU编码规范的一系列文件(带-a选项自动添加缺少的文件,但有几个仍需要自己添加,在执行automake前需执行touch NEWS README AUTHORS ChangeLog)。如果configure.ac配置了使用libtool(定义了AC_PROG_LIBTOOL宏(老版本)或LT_INIT宏),需要在此步骤前先在项目根目录执行libtoolize --automake --copy --force,以生成ltmain.sh,供automake和config.status调用。

  8. 调用autoconf,利用M4解析configure.ac,生成shell脚本configure。以上几步完成后,开发者的工作就算完成了,后面的定制就由开源软件的用户根据需要给configure输入不同的参数来完成。

  9. 用户调用configure,生成Makefile,然后make && make install。

具体操作

  1. 进入project目录

  2. 运行autoscan命令

  3. 将configure.scan 文件重命名为configure.in,并修改configure.in文件

  4. 在project目录下新建Makefile.am文件,并在各个子目录下也新建makefile.am文件

  5. 在project目录下新建NEWS、 README、 ChangeLog 、AUTHORS文件

  6. 将/usr/share/automake-1.X/目录下的depcomp和complie文件拷贝到本目录下

  7. 运行aclocal命令

  8. 运行autoconf命令

  9. 运行automake -a命令

  10. 运行./confiugre脚本

图解

产生Makefile的流程


丁靖
619 声望121 粉丝

好好学习, 天天编码.