自动生成Makefile的详细过程!

                

         作为linux程序员,应该永远也离不开makefile文件。因为它给编译程序,尤其是大的项目带来的便利是不言而喻的。可是面对makefile那羞涩的规则,隐晦的变量,对于一个源文件多的工程,让程序员自己来写makefile那绝对是个头大的事情。可是我门又无法舍弃那只敲一个"make"就能编译出所要结果的快乐!所以GNU开发了一些非常好的工具,就是automake autoconf autoscan aclocal等工具。用它门可以自动生成工程的makefile.

                  下面我介绍以下他们的使用流程。这里有三个文件“mian.c”,"app.c","app.h".app.c包含函数的实现代码,app.h包含头文件,函数声明,main.c调用app.c里的函数。

因此他们的依赖关系为,main.c依赖app.c,app.h   app.c依赖app.h.

   main.c

 #include "app.h"
int main(void)
{
 
  int a,b,c;
   init(&a,&b,&c);
   if(a<b)
     swap(&a,&b);
   if(a<c)
      swap(&a,&c);
   if(b<c)
       swap(&b,&c);
 
   printf("排序之后 a=%d b=%d c=%d\n",a,b,c);
 
}

app.c



#include "app.h"

void swap(int *a,int *b)
{
   *a=*a^*b;
   *b=*b^*a;
   *a=*a^*b;
}

void init(int *a,int *b,int*c)
{
   printf("请输入三个数\n");
   scanf("%d %d %d",a,b,c);
}


app.h

#ifndef APP
#define APP
#include <stdio.h>
#include <stdlib.h>


void init(int *,int *,int *);
void swap(int *,int *);

#endif

现在我们先进入存放源文件的目录,

1.运行:autoscan

[zhangbenquan@zhangbenquan test]$ autoscan
[zhangbenquan@zhangbenquan test]$ ls
app.c  app.h  autoscan.log  configure.scan  main.c

运行生成了autoscan.log,configure.scan两个文件。这里我们只需要configure.scan  文件。

将他改名为configure.in

                                            -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.68])  //确保使用的是足够新的Autoconf版本。如果用于创建configure的Autoconf的版

# 本比version 要早,就在标准错误输出打印一条错误消息并不会创建configure。


AC_INIT(main, 1.0, 503927830@qq.com)  初始化,定义软件的基本信息,包括设置包的全称,版本号以及报告BUG时需要用的邮箱地址 


AC_CONFIG_SRCDIR([app.c])  用来侦测所指定的源码文件是否存在,来确定源码目录的有效性
AC_CONFIG_HEADERS([config.h])  # 用于生成config.h文件,以便autoheader使用
AM_INIT_AUTOMAKE(main,1.0)
# 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([Makefile])


修改AC_INIT里面的参数: AC_INIT(main,1.0, 503927830@qq.com)

添加宏AM_INIT_AUTOMAKE, 它是automake所必备的宏,也同前面一样,PACKAGE是所要产生软件套件的名称,VERSION是版本编号。

在AC_OUTPUT后添加输出文件Makefile

2: 运行aclocal

aclocal.m4  app.c  app.h  autom4te.cache  autoscan.log  configure.in  main.c
生成aclocal.m4 ,autom4te.cache

3:运行autoconf

4:  运行autoheader ,生成config.h.in

5:创建Makefile.am文件

内容如下:

     AUTOMAKE_OPTIONS=foreign
    bin_PROGRAMS=main  /要生成的最终程序名称
   main_SOURCES=main.c app.c app.h  main  

”这个执行程序所需要的原始文件。如果”main”这个程序是由多个原始文件所产生的,则必须把它所用到的 所有原 始文件都列出来,并用空格隔开。例如:若目标体“main”需要“main.c”、“sunq.c”、“main.h”三个依赖文件,则定义 main_SOURCES=main.c sunq.c main.h。要注意的是,如果要定义多个执行文件,则对每个执行程序都要定义相应的file_SOURCES。


6:运行:automake --add-missing

7: ./configure

8:make

9./main

[zhangbenquan@zhangbenquan test]$ ./main
请输入三个数








    


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值