如何使用autotools/automake自动生成Makefile文件
前言:
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文件的更多相关文章
- 使用autoconf与automake自动生成MakeFile文件
automake主要通过编辑Makefile.am来控制它的行为,下面就常用的三个Makefile.am配置做出说明. 1.1. autotools的工作原理 autotools最终是为了生成Make ...
- linux下使用automake工具自动生成makefile文件
linux环境下,当项目工程很大的时候,编译的过程很复杂,所以需要使用make工具,自动进行编译安装,但是手写makefile文件比较复杂,所幸在GNU的计划中,设计出了一种叫做Autoconf/Au ...
- 使用automake等命令自动生成Makefile文件 (转载)
使用automake等命令自动生成Makefile文件 Linux下编程时,为了方便编译,往往使用Makefile文件自动完成编译,但是Makefile文件本身的书写十分复杂,规则很多.好在Lin ...
- 一个简单的执行程序的GNU automake自动生成Makefile的方法及案例
一个简单的执行程序的GNU automake自动生成Makefile的方法及案例 在GNU的世界里,存在Automake这样的工具进行自动生成Makefile文件,automake是由Perl语言编写 ...
- 自动生成Makefile文件
主要的工具有autoscan, aclocal, autoheader, autoconfig,automake 1 .创建c源文件hello.c #include <stdio.h> i ...
- qmake使用方法(自动生成Makefile文件)
qmake的使用简介 下面是qmake的简单介绍和使用要领,更为详细的信息请参阅手册 qmake的介绍 手写Makefile是比较困难并且容易出错的,尤其是需要给不同的平台和编译器组合写几个Makef ...
- 使用automake等命令自动生成Makefile文件
参考:http://www.cnblogs.com/njucslzh/archive/2010/04/29/1723320.html
- GNU autotools自动生成Makefile 介绍
一.目的 使用autotools工具来帮助我们自动地生成符合自由软件惯例的makefile(这样就可以像常见的GNU程序一样,只要使用"./configure", "ma ...
- 使用autotools自动生成Makefile并在此之上使用dh-make生成可发布的deb程序包(详解)
转自:http://blog.csdn.net/longerzone/article/details/12705507 一.前言 本文将介绍如何使用autotools生成一个Makefile文件,并在 ...
- 利用 autoconf 和 automake 生成 Makefile 文件
一.相关概念的介绍 什么是 Makefile?怎么书写 Makefile?竟然有工具可以自动生成 Makefile?怎么生成啊?开始的时候,我有这么多疑问,所以,必须得先把基本的概念搞个清楚. 1.M ...
随机推荐
- vue2 安装swiper
npm install swiper@5.4.5 -D
- selenium执行下载多个文件操作,谷歌浏览器弹出"xxx想要下载多个文件"的处理方法
背景: 使用selenium框架,批量下载多个目录的不同文件,而下载多个文件时,浏览器会弹出如下窗口 解决方案有2个:1.代码定位到元素并点击[允许].2.修改浏览器的设置,使其能够拥有自动下载的 ...
- 如何用python脚本采集某网图片
一.前言: 今天学了两个工具urlopen 和etree,这两个小工具至关重要.urllib.request模块提供了最基本的构造HTTP请求的方法,利用它可以模拟浏览器的一个请求发起过程,同时它还 ...
- 实验1task4
<实验结论> #include <stdio.h> #include <stdlib.h> int main() { int x, t, m; x = 123; p ...
- 【阿里云ACP】-01(阿里云综述、弹性计算)
课程能力 课程范围 ECS 磁盘 实例 磁盘 快照 镜像 网络 安全组 AS 伸缩组 伸缩配置 伸缩规则 伸缩活动 伸缩触发任务 伸缩模式 冷却时间 SLB 定义 实现原理 支持的协议 绘画保持 健康 ...
- K8S informer机制
一.informer介绍 Kubernetes基于声明式API的设计理念,所谓声明式API,即告诉Kubernetes Controller资源对象的期望状态,这样为Kubernetes在事件通知后, ...
- Solution - ARC152D Halftree
首先 \(n\) 为偶数时无解,这是显然的,因为一次加两条边,总边数一定是偶数. 下面我们证明 \(n\) 为奇数时一定有解,直接进行构造. 首先将每一个点编号加上 \(k\) 再模 \(n\) 的答 ...
- k8s资源清单
资源清单就是k8s当中用来定义pod的文件,语法格式遵循yaml语法,在yaml当中可以定义控制器类型,元数据,容器端口号等等等....,也可以针对于清单对pod进行删除等操作. 我们可以用kubec ...
- maridb数据库表及字段增删改
mariadb数据类型 mariadb数据类型分为数字.日期.时间以及字符串值. 适用类型原则:够用就行,尽量使用范围小的,而不用大的 常用数据类型: 1.整数 int,bit #例如 年纪 适用 ...
- while跟if循环
While(表达式)//循环,达成括号里的条件,一直循环执行里面的程序直到得出的值不成立后退出循环 { 循环体} 几个练习题: using System; namespace while练习2 { c ...