这是在看《Linux应用程序开发详解》时自己通过上面的例子自动生成Makefile文件的过程,并摘录了其中的一些放在本文中。
//test.c的源代码
#include <stdio.h>
#include "./sum.h"
int main(int argv, char **argc)
{
int i,n=0;
sum(50);
for(i=1; i<=50; i++)
{
n += i;
}
printf("The sum of 1-50 is %d \n", n );
return 0;
}
//sum.c的源代码
#include "./sum.h"
void sum(int m)
{
int i,n=0;
for(i=1; i<=m;i++)
n += i;
printf("The sum of 1-%d is %d\n",m, n);
}
//sum.h的程序
void sum(int m);
1.先使用which命令查看以下的五个工具是否已经安装了
* autoscan
* aclocal
* autoconf
* autoheader
* automake
2.在这些工具都安装了之后,就先执行autoscan命令,直接使用autoscan是在当前目录及子目录树中寻找源文件,若指定了在那个目录中进行寻找,这样autoscan工具就会到指定的目录及子目录进行查找源文件。经过查找之后会在当前目录中生成“configure.scan”的文件。通过如下命令将“configure.scan”文件改成“configure.ac”或“configure.in”给autoconf工具使用。
再进行后面的操作的时候进行了下面的操作,其中红线所圈出来的是增加上去的。
相应的宏的意义如下:
* 以“#”号开始的行为注释。
* AC_PREREQ 宏声明本文件要求的 autoconf 版本,如本例使用的版本 2.59。
* AC_INIT 宏用来定义软件的名称和版本等信息, 在本例中省略了 BUG-REPORT-ADDRESS,一般为作者的 E-mail。
* AM_INIT_AUTOMAKE 是笔者另加的,它是 automake 所必备的宏,也同前面一样,PACKAGE 是所要产生软件套件的名称,VERSION 是版本编号。
* AC_CONFIG_SRCDIR 宏用来侦测所指定的源码文件是否存在,来确定源码目录的有效性。在此处为当前目录下的 hello.c。
* AC_CONFIG_HEADER 宏用于生成 config.h 文件,以便 autoheader 使用。
* AC_CONFIG_FILES 宏用于生成相应的 Makefile 文件。
* 中间的注释间可以添加分别用户测试程序、测试函数库、测试头文件等宏定义。
2.使用aclocal生成 aclocal.m4和autom4te.cache这两个文件,其中aclocal.m4是处理本地的宏定义的宏。
3.使用autoconf产生configure文件。
4.使用autoheader产生configure.h.in
5.在使用automake前现生成一个Makefile.am的配置文件
AUTOMAKE_OPTIONS=gnu #AUTOMAKE_OPTIONS是automake的选项,可以是gnu、foreign、gnits,默认是gnu(AUTOMAKE_OPTION可变)
bin_PROGRAMS= test #定义要生成的可执行文件的名字
test_SOURCES= test.c sum.c sum.h #生成这个可执行文件所需要的文件的名字(不是黑色的部分是可以随着不同的程序而改变)
6.利用 automake生成 configure.in文件
7.运行./configure生成Makefile文件,之后就可以使用make来编译该文件。
自动生成makefile文件的总体流程如下:
自动生成的Makefile所具有的功能是:
1.make 默认编译所有的文件
2.make install 将改程序安装到系统目录中,就可以直接运行test进行运行程序。
3.make clean 清楚产生了的执行文件和目标文件
4. make dist 将程序和相关的文档打包为一个压缩文档以供发布