AutoConf自动生成Makefile(基于helloworld简单例子)

新建一个简单的helloworld工程文件夹,目录结构如下

hello.h代码:

#include<stdio.h>
void fprint()
{
    printf("hello world!\n");
}

hello.c代码:

#include“hello.h”
int main()
{
    fprint();
    return 0;
}

利用AutoConf工具套件来自动生成Makefile

1. 进入helloworld/目录,运行autoscan

生成autoscan.log和configure.scan文件

 

2. 修改configure.scan为configure.in,并在其中添加如下语句

11行:  M_INIT_AUTOMAKE(hello,1.0.0)

21行:  AC_OUTPUT(Makefile)

 

3. 新建文件 NEWS README ChangeLog AUTHORS

NEWS: 用来记录package对用户可见的修改,最新的修改信息在top顶端,格式不固定

README: 对package的总体介绍

ChangeLog: 重要的文件,有固定格式,记录package的改动

AUTHORS: package贡献的作者,联系方式

 

 4. 运行aclocal命令,产生文件aclocal.m4以及文件夹autom4te.cache/

 

5. 运行autoheader,生成config.h.in文件

 

6. 运行autoconf命令,生成configure二进制命令

 

7. 新建Makefile.am文件,并在其中添加

bin_PROGRAMS = hello

hello_SOURCES = hello.c hello.h

 

8. 运行automake -a 命令,生成Makefile.in文件

 

9. 运行./configure,生成Makefile

 

学习记录:

如果源文件改动后,需要重新生成configure、Makefile、可执行文件命令

方法一: 利用autoreconf命令,重新生成configure二进制文件;但不推荐此方法,因为autoreconf命令中并处理automake命令的--add-missing参数。(例子略)

方法二: 利用AM_MAINTAINER_MODE,打开configure文件的maintainer mode模式,新建bootstrap脚本

 (1)在configure.in中添加:AM_MAINTAINER_MODE (这一步好像无关紧要,因为我没有做,最后也重新生成了)

 (2)新建bootstrap.sh文件,代码如下图,并赋予可执行权限:chmod u+x bootstrap.sh

每当改变源代码后,./bootstrap.sh即可更新全部文件,生成新的可执行命令

 

网上有两篇博客很好的解释了这个过程:

http://www.cnblogs.com/iTsihang/archive/2012/12/01/2797011.html

http://blog.csdn.net/fuli1215/article/details/6399175

 

后面,再来分析大型工程项目以及交叉编译的项目 自动生成Makefile的过程。

 

自我寄语:保持每天学一点,进步一点,只有学习进步才能让无助的自己变得更好更强大!

 

posted @ 2017-06-08 18:15  jrglinux  阅读(527)  评论(0编辑  收藏  举报