zoukankan      html  css  js  c++  java
  • AutoConf自动生成Makefile(基于helloworld简单例子)

    新建一个简单的helloworld工程文件夹,目录结构如下

    hello.h代码:

    #include<stdio.h>
    void fprint()
    {
        printf("hello world!
    ");
    }

    hello.c代码:

    #include“hello.h”
    int main()
    {
        fprint();
        return 0;
    }

    利用AutoConf工具套件来自动生成Makefile

    1. 进入helloworld/目录,运行autoscan

    生成autoscan.log和configure.scan文件

    2. 修改configure.scan为configure.in,并在其中添加如下语句

    11行:  M_INIT_AUTOMAKE(hello,1.0.0)

    21行:  AC_OUTPUT(Makefile)

    3. 新建文件 NEWS README ChangeLog AUTHORS

    NEWS: 用来记录package对用户可见的修改,最新的修改信息在top顶端,格式不固定

    README: 对package的总体介绍

    ChangeLog: 重要的文件,有固定格式,记录package的改动

    AUTHORS: package贡献的作者,联系方式

     4. 运行aclocal命令,产生文件aclocal.m4以及文件夹autom4te.cache/

    5. 运行autoheader,生成config.h.in文件

    6. 运行autoconf命令,生成configure二进制命令

    7. 新建Makefile.am文件,并在其中添加

    bin_PROGRAMS = hello

    hello_SOURCES = hello.c hello.h

    8. 运行automake -a 命令,生成Makefile.in文件

    9. 运行./configure,生成Makefile

    学习记录:

    如果源文件改动后,需要重新生成configure、Makefile、可执行文件命令

    方法一: 利用autoreconf命令,重新生成configure二进制文件;但不推荐此方法,因为autoreconf命令中并处理automake命令的--add-missing参数。(例子略)

    方法二: 利用AM_MAINTAINER_MODE,打开configure文件的maintainer mode模式,新建bootstrap脚本

     (1)在configure.in中添加:AM_MAINTAINER_MODE (这一步好像无关紧要,因为我没有做,最后也重新生成了)

     (2)新建bootstrap.sh文件,代码如下图,并赋予可执行权限:chmod u+x bootstrap.sh

    每当改变源代码后,./bootstrap.sh即可更新全部文件,生成新的可执行命令

    网上有两篇博客很好的解释了这个过程:

    http://www.cnblogs.com/iTsihang/archive/2012/12/01/2797011.html

    http://blog.csdn.net/fuli1215/article/details/6399175

     

    后面,再来分析大型工程项目以及交叉编译的项目 自动生成Makefile的过程。

    自我寄语:保持每天学一点,进步一点,只有学习进步才能让无助的自己变得更好更强大!

  • 相关阅读:
    iOS 项目中的NSNotification简单使用
    IOS开发之格式化日期时间的使用 && 编程中常见问题
    linker command failed with exit code 1 (use -v to see invocation),经典Xcode编译错误的出现和解决!
    CocoaPods安装和使用教程
    机器学习算法--贝叶斯分类器(二)
    机器学习算法--贝叶斯分类器(一)
    Linux系统初始化过程及运行级别简介
    Linux基本符号
    索引节点inode详解
    Linux文件类型介绍
  • 原文地址:https://www.cnblogs.com/jrglinux/p/6964169.html
Copyright © 2011-2022 走看看