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

posted @ 2020-02-09 12:45  寻行者  阅读(507)  评论(0编辑  收藏  举报