如何使用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