使用automake等命令自动生成Makefile文件

本文介绍如何在Linux环境下使用autoconf和automake等工具自动创建Makefile文件,通过一个斐波那契数计算程序的例子详细展示了从源代码到Makefile生成的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       Linux下编程时,为了方便编译,往往使用Makefile文件自动完成编译,但是Makefile文件本身的书写十分复杂,规则很多。好在Linux为我们提供了自动生成功能完善的Makefile文件的工具autoconf/automake。本文讲述如何使用它们生成Makefile文件。要用到的工具组主要包括autoconf,automake,perl语言环境和m4。

      可以使用命令rpm -qa | grep command_name查看它们的信息,在Ubuntu下看了,默认却没装,所以在Fedora下弄了。

      查看的示例如下:

2010042918145372.jpg

      整个工具组的工作流程如下图:

2010042918022139.jpg

     

     下面以实例演示如何使用automake等生成Makefile文件。

1  写一个简单的程序,本例写了个简单的计算斐波那契数的程序,有三个文件组成:main.c,fib.c,fib.h,代码如下:

 main.c

1 #include<stdio.h>
2 #include"fib.h"
3  int main()
4 {
5 int n=0;
6 printf("input n=\n");
7 scanf("%d",&n);
8 printf("fib(%d=%d\n",n,fib(n));
9
10 return 0;
11 }

fib.h

int fib(int n);

fib.c

1 #include"fib.h"
2  int fib(int n)
3 {
4 if(n==0)
5 return 0;
6 if(n==1||n==2)
7 return 1;
8 return fib(n-1)+fib(n-2);
9 }

使用ls命令查看如下:

2010042918282688.jpg

2  使用autoscan生成configure.scan文件,将其重命名为configure.ac,并做适当修改。如下:

 2010042918322775.jpg

2010042918335755.jpg

configure.scan内容如下:

2010042918350922.jpg

修改configure.ac内容如下:

AC_INIT()中分别应填程序的名字,版本,和作者的联系方式(一般是Email)

添加一行AM_INIT_AUTOMAKE(),参数添程序名字,版本号

最后AC_OUTPUT()生成的文件。

2010042919091895.jpg

3  使用aclocal工具生成aclocal.m4

2010042918491928.jpg

4  使用autoconf工具生成configure文件

2010042918502870.jpg

5  使用autoheader使用config.h.in文件

2010042918513938.jpg

6  手工编辑Makefile.am文件。

第一项:软件等级,有三个候选项:foreign,gnu,gnits

第二项:生成的可执行文件名

第三项:生成可执行文件所需的原始文件,有多个文件时用空格隔开,如本例

2010042918424944.jpg

7  使用automake生成Makefile.in文件,内容如下:

2010042919184822.jpg

8  运行configure配置生成最终的Makefile文件

 2010042919201135.jpg

9  使用Makefile编译,运行程序

2010042919213534.jpg

还可以将代码打包发布:

2010042919225927.jpg

 

     这些命令功能强大,很多参数的意思这里没列出来,可以查阅相关书籍和手册。本文旨在展示整个过程,和最常用到的参数。以后写程序特别是文件较多时是不是方便了很多?

转载于:https://www.cnblogs.com/njucslzh/archive/2010/04/29/1723320.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值