教你如何使用automake生成Makefile文件

本文介绍了如何使用automake根据源码的flat, shallow, deep三种组织结构生成Makefile文件,详细阐述了创建过程,并提供了相关目录结构示例。" 109902804,10294412,R语言实现偏最小二乘回归法(PLS):对比最小二乘回归,"['R语言', '偏最小二乘回归', '最小二乘回归', '数据建模', '预测分析']
摘要由CSDN通过智能技术生成


1 引言

  众所周知,Makefile主要用来组织源码的编译,其语法在此不做阐述。经分析可发现,源码的组织结构通常有以下3种形式:

    1) flat:所有文件都处在同一目录

        所有源文件、头文件以及相关的库文件都处在当前的目录中,不存在任何子目录。

    2) shallow:主要源代码处在顶层目录,其他各部分处在子目录

        主要源文件在当前目录中,而其它一些实现各部分功能的源文件位于各自不同的目录。

    3) deep:所有源代码处在子目录,顶层目录存放配置信息

        所有源文件及自己写的头文件位于当前目录的一个子目录中,而当前目录里没有任何源文件。

    使用automake对以上3种源码组织结构的编译过程在某些细节上存在一些差异,但是大概流程是一致的,如下图所示:


图1 生成Makefile的过程

2 创建过程

2.1 FLAT

  根据引言中对flat源码结构的描述“所有源文件、头文件以及相关的库文件都处在当前的目录中,不存在任何子目录可知其目录结构如下图所示:


图2 flat源码结构
(注:将algo.c改为algo.h)
目录说明:
    add.c:实现加法运算 int my_add(int a, int b) { return (a + b); }
    sub.c:实现减法运算 int my_sub(int a, int b) { return (a - b); }
    mul.c:实现乘法运算 intmy_mul(int a, int b) { return(a * b); }
    div.c: 实现除法运算 intmy_div(int a, int b) { return(a / b); }
    algo.h:头文件声明源码中实现的函数
    test.c:在主函数中调用以上源文件实现的函数,并展示运算结果
编译步骤:
1) 执行autoscan
    在目录中执行autoscan命令,会生成文件configure.scan,再将其重命名为configure.in,最后还需要做如下修改。
    #autoscan
    #mv configure.scan configure.in
    #vim configure.in
修改过程:
    ①、将AC_CONFIG_SRCDIR([sub.c])改为AC_CONFIG_SRCDIR([test.c]) - 注:使用有主函数main()的源文件test.c取代sub.c
    ②、将AC_CONFIG_HEADER([config.h])改为AM_CONFIG_HEADER([config.h])
    ③、新增AM_INIT_AUTOMAKE(math, 1.0):其中math是希望生成的可执行程序的名字,1.0表示版本号
    ④、将AC_OUTPUT改为AC_OUTPUT(Makefile):表示要创建的Makefile名

图3 修改前后对比
2) 配置Makefile.am
    在当前目录中新建Makefile.am文件,生成可执行文件math,因此其配置内容为:

图4 Makefile.am
autoconf和automake是一组用于生成makefile文件的工具,用于自动化构建过程。autoconf主要用于检测系统环境和软件依赖,而automake用于生成makefile文件。 在使用autoconf生成makefile文件的过程,首先需要创建一个configure.ac文件,该文件包含了一些宏和脚本代码。在configure.ac文件,通过使用宏来检测系统环境,比如检测编译器、库和头文件的存在与版本。同时,还可以通过宏来检测用户配置选项,比如编译参数和安装路径等。 在configure.ac文件,可以使用一些宏编写脚本代码来实现自定义操作。例如,可以使用AC_CHECK_LIB宏来检测某个库是否存在,AC_CHECK_HEADER宏来检测某个头文件是否存在,AC_CONFIG_FILES宏来定义要生成makefile文件等。 然后,通过运行autoconf命令来生成一个configure脚本。这个configure脚本用于根据configure.ac文件的宏和脚本代码来生成makefile.in文件makefile.in文件是一个模板文件,它包含了一些变量和规则,但是还没有具体的值。 接下来,使用automake工具来生成最终的makefile文件automake会读取configure.ac文件makefile.in文件,并根据约定的规则自动生成makefile文件。在生成makefile文件的过程automake会根据configure.ac文件的宏和脚本代码来解析变量的默认值和用户配置选项,以及生成各个编译目标和规则。最终生成makefile文件可用于构建和安装软件。 总结来说,autoconf和automake是一对强大的工具,可以自动化生成makefile文件,减少开发人员的工作量。通过检测系统环境和用户配置选项,以及根据约定的规则生成makefile文件,可以方便地进行软件构建和安装。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值