• 如何使用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! ");

    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 ", 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

  • 相关阅读:
    如何在delphi里面控制Edit只能输入数字
    ShellExecute函数
    GetSystemMenu 获取系统菜单
    StringReplace 函数
    delphi 字符串查找
    Pos 函数
    Copy 函数
    css笔记
    HTML5笔记
    node.js nodejs supvisor模块
  • 原文地址:https://www.cnblogs.com/grandblogs/p/12286254.html
Copyright © 2020-2023  润新知