前言:

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

因此,我们在使用autotools(automake,autoconf, autoheader, aclocal, autoscan, m4)生成Makefile之前, 应该先检查你的Linux系统中是否安装了automake,autoconf, autoheader,aclocal, autoscan, m4和perl。

  • 检查是否安装了automake如:$automake --version, 其他的autotools也可以如此检查。

说明:一般来说我们只要安装了automake, autoconf和m4其他的autotools也会自动安装,另外就是一定记得安装perl。

automake生成makefile的原理

下图是在网上参考的使用autotools生成Makefile的流程和原理图:

动手实战:

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

1.  写一个简单的程序

主源文件:main.c

#include<stdio.h>
#include"calculate.h"

int main(int arc, char* argv[])
{
printf("hello world!\n");

int sum = add(10, 15);
printf("sum:%d", sum);
return 0;
}

头文件:calculate.h

#ifndef __CALCULATE__
#define __CALCULATE__

int add(int a, int b);

#endif

源文件:calculate.c

#include<stdio.h>
#include"calculate.h"

int add(int a, int b)
{
printf("a:%d, b:%d\n", a, b);
return (a+b);
}

使用ls命令查看如下:

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

  • 执行autoscan并重命名后查看:

  • 查看configure.ac文件原始内容:

  • 修改configure.ac内容如下:

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

添加一行AM_INIT_AUTOMAKE(),添加相应的参数。

最后AC_OUTPUT()生成的文件。

注意:最后一行AC_OUTPUT,如果文件中已经包含AC_CONFIG_FILES([Makefile])则默认保持:AC_OUTPUT。

3. 使用aclocal工具生成aclocal.m4

4. 使用autoconf工具生成configure文件

5. 使用autoheader工具生成config.h.in文件

6  用vi生成一个空文件Makefile.am, 并编辑如下三项。

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

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

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

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

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

9. 使用Makefile编译,并运行编译后的程序:

附加:

还可以将代码打包发布:

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

另外更复杂目录结构可以参考:https://blog.csdn.net/cloud_desktop/article/details/20559741

如何使用autotools/automake自动生成Makefile文件的更多相关文章

  1. 使用autoconf与automake自动生成MakeFile文件

    automake主要通过编辑Makefile.am来控制它的行为,下面就常用的三个Makefile.am配置做出说明. 1.1. autotools的工作原理 autotools最终是为了生成Make ...

  2. linux下使用automake工具自动生成makefile文件

    linux环境下,当项目工程很大的时候,编译的过程很复杂,所以需要使用make工具,自动进行编译安装,但是手写makefile文件比较复杂,所幸在GNU的计划中,设计出了一种叫做Autoconf/Au ...

  3. 使用automake等命令自动生成Makefile文件 (转载)

    使用automake等命令自动生成Makefile文件   Linux下编程时,为了方便编译,往往使用Makefile文件自动完成编译,但是Makefile文件本身的书写十分复杂,规则很多.好在Lin ...

  4. 一个简单的执行程序的GNU automake自动生成Makefile的方法及案例

    一个简单的执行程序的GNU automake自动生成Makefile的方法及案例 在GNU的世界里,存在Automake这样的工具进行自动生成Makefile文件,automake是由Perl语言编写 ...

  5. 自动生成Makefile文件

    主要的工具有autoscan, aclocal, autoheader, autoconfig,automake 1 .创建c源文件hello.c #include <stdio.h> i ...

  6. qmake使用方法(自动生成Makefile文件)

    qmake的使用简介 下面是qmake的简单介绍和使用要领,更为详细的信息请参阅手册 qmake的介绍 手写Makefile是比较困难并且容易出错的,尤其是需要给不同的平台和编译器组合写几个Makef ...

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

    参考:http://www.cnblogs.com/njucslzh/archive/2010/04/29/1723320.html

  8. GNU autotools自动生成Makefile 介绍

    一.目的 使用autotools工具来帮助我们自动地生成符合自由软件惯例的makefile(这样就可以像常见的GNU程序一样,只要使用"./configure", "ma ...

  9. 使用autotools自动生成Makefile并在此之上使用dh-make生成可发布的deb程序包(详解)

    转自:http://blog.csdn.net/longerzone/article/details/12705507 一.前言 本文将介绍如何使用autotools生成一个Makefile文件,并在 ...

  10. 利用 autoconf 和 automake 生成 Makefile 文件

    一.相关概念的介绍 什么是 Makefile?怎么书写 Makefile?竟然有工具可以自动生成 Makefile?怎么生成啊?开始的时候,我有这么多疑问,所以,必须得先把基本的概念搞个清楚. 1.M ...

随机推荐

  1. spring@Validated校验用法

    1.controller添加注解 public BaseResponse addOrUpdateUnit(@RequestBody @Validated RiskUnitDto riskUnitDto ...

  2. 活动 | Cloud Ace 受邀参加中国智造出海数字科技峰会

    [Cloud Ace 是谷歌云全球战略合作伙伴,拥有 200 多名工程师,也是谷歌最高级别合作伙伴,多次获得 Google Cloud 合作伙伴奖. 作为谷歌托管服务商,我们提供谷歌云.谷歌地图.谷歌 ...

  3. reduce()

    from functools import reducea=[10,11,22,33]b=reduce(lambda x,y:x+y,a)<===>sum(a)print(b)

  4. Vue源码中的数据代理

    直接开讲: ​ 由于这个Vue底层封装的函数太多了,我这里只讲思路不说具体的执行了什么函数. ​ const vm=new Vue({这里写一个data,可以是对象也可以是函数}) 在写这段代码的时候 ...

  5. springcloud(三) - 负载均衡Ribbon

    功能介绍 基本保证每个服务不同的ip接收到的请求数量是一样的,确保在微服务下没有没有那个服务器负载过多而另外一个闲置. IRule:根据规则获取制定的服务 规则列表 RoundRobinRule:轮询 ...

  6. SAP SD VA01 销售订单中的自动价格更新

    场景 :当用户使用假定物料" A"创建销售订单时,确定了价格,但随后用户意识到需要更改物料,因此他们更改了订单中的物料. 现在,它显示价格已经重新确定,但是在项目条件页面中时,他们 ...

  7. 230219 Business 1-30

    1: Packing for a Business TripWhat should I bring on this business trip?Haven't you been on a busine ...

  8. GPIO原理及配制方法

    GPIO原理及配制方法 引用地址: ARM SOC芯片的GPIO结构示意图 @@@ GPIO的八种模式 1,输入浮空模式 2,输入上拉模式 3,输入下拉模式 4,模拟输入模式 5,开漏输出模式 6,开 ...

  9. 配置Centos8网络绑定

    配置Centos8网络绑定 原理: 在物理网卡两块之上创建一块虚拟主卡, 逻辑上是一主双从, 按不同的模式负载运行,常用模式如主备或并行提供双倍带宽等.模式:   可选参数"mode=act ...

  10. 扩linux 主分区 xfs 格式的

    在centos8 上 扩主分区 # 扩系统盘,第一个分区 growpart /dev/vda 1 #后面加挂接点 一般是 / xfs_growfs  / # 查看 df -h