zoukankan      html  css  js  c++  java
  • make学习笔记(一)

    make在于一种时间依赖关系。

    功能:可以对有改变的工程进行快速编译,链接成可执行文件。

    关键:书写Makefile文件

    优化:GNU组织公布了根据工程自动生动生成Makefile文件的工具automake

    由于MacOsX下没有自带automake所以到GNU官网下载了m4->autoconf->automake三个开源软件

    版本分别为:m4-1.4.11.tar,autoconf-2.63.tar,automake-1.9.1.tar

    解压(tar -xvf)后cp到/usr/bin目录下。

    解压命令:

    1、*.tar 用 tar –xvf 解压

    2、*.gz 用 gzip -d或者gunzip 解压

    3、*.tar.gz和*.tgz 用 tar –xzf 解压

    4、*.bz2 用 bzip2 -d或者用bunzip2 解压

    5、*.tar.bz2用tar –xjf 解压

    6、*.Z 用 uncompress 解压

    7、*.tar.Z 用tar –xZf 解压

    8、*.rar 用 unrar e解压

    9、*.zip 用 unzip 解压

    那么,如何使用automake呢?

    转载:http://www.cnblogs.com/TheGrandDesign/articles/2344675.html

    1. 源码根目录调用autoscan脚本,生成configure.scan文件,然后将此文件重命名为configure.ac(configure.in,早期使用.in后缀)

    2. 修改【configure.ac,利用autoconf提供的各种M4宏,配置项目需要的各种自动化探测项目

    3. 编写【自定义宏】,建议每个宏一个单独的*.m4文件;

    4. 调用aclocal收集configure.ac中用到的各种非Autoconf的宏,包括自定义宏;

    5. 调用autoheader,扫描configure.ac(configure.in)acconfig.h(如果存在),生成config.h.in宏定义文件,里面主要是根据configure.ac中某些特定宏(AC_DEFINE)生成的#define#undefine宏,configure在将根据实际的探测结果决定这些宏是否定义(具体见后面例子)。

    6. 按照automake规定的规则和项目的目录结构,编写一个或多个【Makefile.am(Makefile.am数目和存放位置和源码目录结构相关)Makefile.am主要写的就是编译的目标及其源码组成。

    7. 调用automake,将每个Makefile.am转化成Makefile.in,同时生成满足GNU编码规范的一系列文件(带-a选项自动添加缺少的文件,但有几个仍需要自己添加,在执行automake前需执行touch NEWS README AUTHORS ChangeLog)。如果configure.ac配置了使用libtool(定义了AC_PROG_LIBTOOL宏(老版本)或LT_INIT宏),需要在此步骤前先在项目根目录执行libtoolize --automake --copy --force,以生成ltmain.sh,供automakeconfig.status调用。

    8. 调用autoconf,利用M4解析configure.ac,生成shell脚本configure。以上几步完成后,开发者的工作就算完成了,后面的定制就由开源软件的用户根据需要给configure输入不同的参数来完成。

    9. 用户调用configure,生成Makefile,然后make && make install

    整个过程步骤有9步,但其中有6步你只需要简单的敲一个命令即可,只有剩下的三步需要你动手写一些东西,对应上面步骤中的蓝色黑体字部分,而本文的重点就是如何在大型项目中完成这三歩。

    再优化:运用上面9步还是麻烦,于是写了一份shell脚本自动化完成上面9个步骤

    #! /bin/Bash
    export OBJ1=$(ls *.c)
    test=main 
    autoscan
    TMP_file=$(ls *.scan)
    cat > $TMP_file << 'HERE'
    ###HERE###
    AC_PREREQ(2.63)
    AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
    AM_INIT_AUTOMAKE(main,1,0)
    AC_CONFIG_SRCDIR([main.c])
    #AM_CONFIG_HEADER([config.h])
    
    # Checks for programs.
    AC_PROG_CC
    
    # Checks for libraries.
    
    # Checks for header files.
    
    # Checks for typedefs, structures, and compiler characteristics.
    
    # Checks for library functions.
    AC_OUTPUT(Makefile)
    HERE
    ###HERE###
    mv configure.scan configure.in
    #################################
    aclocal
    autoconf
    touch Makefile.am
    echo AUTOMAKE_OPTIONS=foreign >Makefile.am
    echo bin_PROGRAMS=$test>> Makefile.am
    tt=$test"_SOURCES"
    echo $tt= $OBJ1 >> Makefile.am
    ################################
    automake --add-missing
    ./configure
    make

    总结:

    make可以快速编译生成大型项目

    automake省去了书写Makefile的步骤

    我的shell脚本省去了用automake手动制作Makefile的步骤

  • 相关阅读:
    八数码难题 (codevs 1225)题解
    小木棍 (codevs 3498)题解
    sliding windows (poj 2823) 题解
    集合删数 (vijos 1545) 题解
    合并果子 (codevs 1063) 题解
    等价表达式 (codevs 1107)题解
    生理周期 (poj 1006) 题解
    区间 (vijos 1439) 题解
    区间覆盖问题 题解
    种树 (codevs 1653) 题解
  • 原文地址:https://www.cnblogs.com/markliu/p/2798025.html
Copyright © 2011-2022 走看看