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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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
3) 新建文件
    在当前目录下新建文件NEWS、README、ChangeLog、AUTHORS文件,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值