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的步骤

  • 相关阅读:
    [转载]Bison-Flex 笔记
    LeetCode 5 Longest Palindromic Substring manacher算法,最长回文子序列,string.substr(start,len) 难度:2
    LeetCode 6 ZigZag Conversion 模拟 难度:0
    LeetCode 7 Reverse Integer int:2147483647-2147483648 难度:2
    #Leetcode# 383. Ransom Note
    #Leetcode# 92. Reverse Linked List II
    #Leetcode# 143. Reorder List
    #Leetcode# 532. K-diff Pairs in an Array
    #Leetcode# 86. Partition List
    Sudoku
  • 原文地址:https://www.cnblogs.com/markliu/p/2798025.html
Copyright © 2011-2022 走看看