如何使用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 ...
随机推荐
- Camstar报错:cannot be accessed through null object reference at CDO 'xxx'
- docker报错:报错br-xxxx 之Docker-Compose 自动创建的网桥与局域网络冲突
故障描述: 当我使用docker-compose的方式部署内网的harbor时.它自动创建了一个bridge网桥,与内网的一个网段(172.18.0.1/16)发生冲突,docker 默认的网络模式是 ...
- Hyper-V虚拟机在Win2019server中共用一个公网IP
Hyper-V虚拟机在Win2019server中共用一个公网IP 有时生产环境中希望一台宿主机上的多台虚拟机共用一个IP出口,按以下操作处理即可. 环境: Windows 2019 server D ...
- java的排序问题
普通排序 对于基础数据类型的排序,基本只是调用一下方法 如java的 1 Arrays.sort(nums); 那么如何自定义排序规则呢? 自定义排序规则: 假设现在有这么个问题,有n个学生, 每个学 ...
- 解决vscode中,powershell中conda activate无效--更改vscode默认的shell为anaconda shell
问题记录: windows系统里,cmd可以正常使用conda activate 命令,但是在powershell中,使用conda activate既不报错(说明路径没问题),也没激活conda环境 ...
- tif文件拼接+转换成netcdf格式
2022-11-16 11:33 手上有若干个SRTM1V3.0 的高程数据,为HGT格式,需要将其拼接并转换成netcdf格式,以让ncl能够进行读取 步骤: gdal_translate A.hg ...
- div垂直居中的4种方式方式
一.使用单元格居中 <!DOCTYPE html> <html> <head> <title>测试</title> </head> ...
- 一个MySQL双引号把我坑惨了!
一.前言 最近经常碰到开发误删除误更新数据,这不,他们又给我找了个麻烦,我们来看下整个过程,把我坑得够惨. 二.过程 由于开发需要在生产环节中修复数据,需要执行120条SQL语句,需要将数据进行更新, ...
- vl_nnconv.mexw64找不到指定模块
在Installing and compiling the library--matconvnet-1.0-beta25时遇到的错误,总是提示"Invalid MEX-file 'C:\Us ...
- 【STM32】串口收发驱动Drv_Uart|学习笔记
一.什么事串口? 大家常说串口,其实串口有很多种UART,SPI,IIC都是串口,一般大家口中的串口就是UART(Universal Asynchronous Receiver/Transmitter ...