详解Linux下auto工具制作Makefile源码包(制作篇)

一、 概述

为了更好的制作configure与Makefile,我先把制作流程给写在这里,好让大伙都有个心理准备。这里只说流程,不做解释。(附图供参考)

详解Linux下auto工具制作Makefile源码包(制作篇)

1、autosan命令生成configure.scan文件,这只是个模板,我们重新编辑这个文件,并把它保存为configure.in文件。

2、aclocal命令生成aclocal.m4文件。

3、autoheader命令生成config.h.in。前提是aclocal.m4和configure.in必须生成。

4、autoconf命令生成configure文件(这个文件都很熟悉吧,嘎嘎)。

5、创建并编辑Makefile.am,这个文件在根目录与子目录都应该有的。

6、automake命令生成Makefile.in。

7、./configure命令,根据Makefile.in生成Makefile文件,这个再熟悉不过了吧。

二、     制作

巧妇难做无米之炊,要想完成这次体验,我们还得按规矩一步一步来,源文件得有。首先建个目录Family用来放我们的东西,它下面的东西就多了。源代码什么阿c,阿h啊,都放在src下面,src这个文件夹命名一般都是约定俗成的,我们也不破坏。当然你也可以起其他名字,别搞忘就好。

<Family>

 |-configure.in

 |-Makefile.am 

 |-<src>

   |-wife.c

   |-daughter.c                                                                   |-main.c

   |-wife.h                                                                       |-daughter.h

   |-Makefile.am

※说明:

1. configure.in 这是最重要的文档,整个安装过程都靠它来主导。

2. Makefile.am automake会根据它来生成Makefile.in,再由./configure Makefile.in变成最终的Makefile,一般来说在顶级目录和各个子目录都应该有一个Makefile.am

3. wife.c daughter.c main.c wife.h daughter.h 这是我们的源程序。

不用细看,这些文件除了configure.in是用模板创建手动编辑外,其他都是手动创建并编辑的,如果你还木有,动手吧。其实这里边有个小小的经验,也不一定是对的,只是个人的经验,也就是后缀名为in的文件是生成的模板。

$ mkdir –p Family/src

$ touch Makefile.am

$ cd src

$ touch wife.c daughter.c main.c wife.h daughter.h Makefile.am

$ cd ..  进入刚创建的Family目录

$ autoscan 该命令产生 configure.scan 和 configure.log两个文件,然后

$ mv configure.scan configure.i n这样configure.in就创建成了。

※源代码内容:

main.c: 

#include <stdio.h>

#include "wife.h"

#include "daughter.h"

#ifdef HAVE_CONFIG_H

#include <config.h>

#endif

int main(void)

{

printf( "These are my girls\n");

daughter_say();

wife_say();

return 0;

}

daughter.c

#include <stdio.h>

#include "daughter.h"

#ifdef HAVE_CONFIG_H

#include <config.h>

#endif

void daughter_say(void)

{

printf("My Dad ,are you call me ?\n");

}

daughter.h

#ifndef _DAUGHTER_

#define _DAUGHTER_

void daughter_say(void);

#endif

wife.c

#include <stdio.h>

#include "wife.h"

#ifdef HAVE_CONFIG_H

#include <config.h>

#endif

void wife_say(void)

{

printf("My darling ,are you call me ?\n");

}

wife.h

#ifndef _WIFE_

#define _WIFE_

void wife_say(void);

#endif

相关推荐