美文网首页大数据 爬虫Python AI SqlArtificial Intelligence
autoMake工具使用实例(Hello, World!)

autoMake工具使用实例(Hello, World!)

作者: Lee_5566 | 来源:发表于2018-11-01 19:17 被阅读2次

    定义

    Makefile的 基本结构不是 很复杂,但当一个程序开发人员开始写Makefile时,经常会怀疑自己写的 是 否符合惯例,而且自己写的 Makefile经常和自己的 开发环境相关联,当系统环境变量或路径发生了变化后,Makefile可能还要跟着修改.这样就造成了手工书写Makefile的 诸多问题,automake恰好能很好地帮助我们解决这些问题.
      
    使用automake,程序开发人员只需要写一些简单的 含有预定义宏的 文件,由autoconf根据一个宏文件生成configure,由automake根据另一个宏文件生成Makefile.in,再使用configure依据Makefile.in来生成一个符合惯例的 Makefile.下面我们将详细介绍Makefile的 automake生成方法.

    使用automake命令执行顺序

    aclocal; 
    autoconf; 
    automake --add-missing; 
    ./configure; 
    make; 
    ./helloworld
    

    当然事先要先安装相关的软件库。这里不再多说。
    下面用一个例子来说明autoMake使用方法。

    关于hello,world.

    首先创建个hello, world的代码:
    文件名helloworld.c

    #include <stdio.h>
    
    int main()
    {
        printf("hello, world!\n");
        return 0;
    }
    
    

    执行

    $ autoscan
    Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/\${ <-- HERE [^\}]*}/ at /usr/bin/autoscan line 361.
    $ ls
    autoscan.log  configure.scan  helloworld.c
    
    

    将configure.scan复制为configure.ac,并修改其中的内容为:

    $ ls
    autoscan.log  configure.ac  configure.scan  helloworld.c
    $ cat configure.ac 
    # -*- Autoconf -*-
    # Process this file with autoconf to produce a configure script.
    AC_INIT(helloworld.c)
    AM_INIT_AUTOMAKE(helloworld, 1.0)
    # 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)
    
    

    执行aclocal生成aclocal.m4文件:

    $ aclocal
    $ ls
    aclocal.m4  autom4te.cache  autoscan.log  configure.ac  configure.scan  helloworld.c
    
    

    执行autoconf生成configure文件:

    $ autoconf
    $ ls
    aclocal.m4  autom4te.cache  autoscan.log  configure  configure.ac  configure.scan  helloworld.c
    
    

    然后开始创建Makefile.am文件:

    $ cat Makefile.am 
    UTOMAKE_OPTIONS=foreign
    bin_PROGRAMS=helloworld
    helloworld_SOURCES=helloworld.c
    
    

    有了Makefile.am文件,我们就可以使用automake了:

    $ $ automake --add-missing
    configure.ac:4: warning: AM_INIT_AUTOMAKE: two- and three-arguments forms are deprecated.  For more info, see:
    configure.ac:4: http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_005fINIT_005fAUTOMAKE-invocation
    
    $ ls
    aclocal.m4      autoscan.log  configure     configure.scan  depcomp       INSTALL     Makefile.am
    autom4te.cache  compile       configure.ac  COPYING         helloworld.c  install-sh  missing
    
    

    然后在执行configure,生成Makefile:

    $ ./configure 
    checking for a BSD-compatible install... /usr/bin/install -c
    checking whether build environment is sane... yes
    checking for a thread-safe mkdir -p... /bin/mkdir -p
    checking for gawk... no
    checking for mawk... mawk
    checking whether make sets $(MAKE)... yes
    checking whether make supports nested variables... yes
    checking for gcc... gcc
    checking whether the C compiler works... yes
    checking for C compiler default output file name... a.out
    checking for suffix of executables... 
    checking whether we are cross compiling... no
    checking for suffix of object files... o
    checking whether we are using the GNU C compiler... yes
    checking whether gcc accepts -g... yes
    checking for gcc option to accept ISO C89... none needed
    checking whether gcc understands -c and -o together... yes
    checking for style of include used by make... GNU
    checking dependency style of gcc... gcc3
    checking that generated files are newer than configure... done
    configure: creating ./config.status
    config.status: creating Makefile
    config.status: executing depfiles commands
    $ ls
    aclocal.m4      compile        configure       COPYING       INSTALL     Makefile.am
    autom4te.cache  config.log     configure.ac    depcomp       install-sh  Makefile.in
    autoscan.log    config.status  configure.scan  helloworld.c  Makefile    missing
    
    

    有了Makefile,就可以直接make了:

    $ make
    gcc -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"helloworld\" -DVERSION=\"1.0\" -I.     -g -O2 -MT helloworld.o -MD -MP -MF .deps/helloworld.Tpo -c -o helloworld.o helloworld.c
    mv -f .deps/helloworld.Tpo .deps/helloworld.Po
    gcc  -g -O2   -o helloworld helloworld.o  
    $ ./helloworld 
    hello, world!
    
    

    不得不说,这个工具的强大,当然也生成了许多的文件。不过还是很好的。

    相关文章

      网友评论

        本文标题:autoMake工具使用实例(Hello, World!)

        本文链接:https://www.haomeiwen.com/subject/zslxxqtx.html