• Examples


    autotools制作makefile

    下面以hello.c来说明生成makefile的过程。

    基本步骤如下:

    1)autoscan命令生成configure.scan文件,重命名configure.scan,并修改

    2)aclocal命令生成aclocal.m4

    3)autoconf命令生成configure

    4)新建文件Makefile.am,执行automake命令生成Makefile.in文件

    5)运行configure命令生成Makefile

    具体步骤如下:

    1. 先用which命令确认系统是否安装了以下工具

    aclocal

    autoscan

    autoconf

    autoheader

    automake

    2. 新建目录hello,cd hello,  编写hello.c

    3. 执行命令 autoscan, 会生成configuer.scan和autoscan.log

    autoscan.log  configure.scan  hello.c

    4. 将configure.scan重命名为configure.in,并编辑。

    # -*- Autoconf -*-
    # Process this file with autoconf to produce a configure script.
     
    #AC_PREREQ([2.69])
    AC_INIT(hello, 1.0, xxxx@xxxx.cn)
    AM_INIT_AUTOMAKE(hello, 1.0, xxxx@xxxx.cn)   -----------这里是AM,不是AC
    
    
    #AC_CONFIG_SRCDIR([hello.c])
    #AC_CONFIG_HEADERS([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)





    说明:
    AC_PREREQ 宏声明本文件要求的 autoconf 版本
    AC_INIT(FULL-PACKAGE-NAME,VERSION,BUG-REPORT-ADDRESS) ,用来定义软件的名称和版本等信息 ,第三个参数一般为作者的Email
    AM_INIT_AUTOMAKE,是automake必备的宏,使automake自动生成makefile.in

    AC_CONFIG_SRCDIR, 用来检查所指定的源码文件是否存在,以及确定源码目录的有效性。在此处源码文件为当前目录下的hello,c
    AC_CONFIG_HEADER,用于生产config.h文件,以便autoheader使用
    AC_CONFIG_FILES, 用于生成对应的Makefile文件。
     

    5. 执行命令aclocal,生成aclocal.m4和autom4te.cache文件。

    aclocal: warning: autoconf input should be named 'configure.ac', not 'configure.in'  ----不用理会

    -> ls

    aclocal.m4  autom4te.cache  autoscan.log  configure.in  hello.c

    6. 执行命令autocon,生成configure文件

    -> ls
    
    aclocal.m4  autom4te.cache  autoscan.log  configure  configure.in  hello.c

    7. 新建Makefile.am文件

    AUTOMAKE_OPTIONS=foreign
    bin_PROGRAMS=hello
    hello_SOURCES=hello.c


    其中:
    AUTOMAKE_OPTIONS, 为设置automake的选项。GNU 对自己发布的软件有严格的规范,
    比如必须附带许可证声明文件 COPYING 等,否则 automake 执行时会报错。 automake 提供了 3
    种软件等级: foreigngnu gnits,让用户选择采用,默认等级为 gnu。在本示例中采用 foreign
    等级,它只检测必须的文件。
    bin_PROGRAMS,定义要产生的执行文件名。如果要产生多个执行文件,每个文件名用空格隔开
    hello_SOURCES,定义hello可执行文件所需要的原始文件。如果“hello”这个程序是由多个
    原始文件所产生的,则必须把它所用到的所有原始文件都列出来,并用空格隔开。例如:若目标
    体“hello”需要“hello.c”、“david.c”、“hello.h”三个依赖文件,则定义 hello_SOURCES=hello.c david.c
    hello.h。要注意的是 ,如果要定义多个执行文件 ,则对每个执行程序都要定义相应的
    file_SOURCES

    8. 执行命令automake --add-missing,生成Makefile.in文件

    automake -a或者automake --add-missing,可以让automake自动添加一些必须的脚本文件。

    automake: warning: autoconf input should be named 'configure.ac', not 'configure.in'
    configure.in:6: warning: AM_INIT_AUTOMAKE: two- and three-arguments forms are deprecated.  For more info, see:
    configure.in:6: http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_005fINIT_005fAUTOMAKE-invocation
    configure.in:13: installing './compile'
    configure.in:6: installing './install-sh'
    configure.in:6: installing './missing'
    Makefile.am: installing './depcomp'
    automake: warning: autoconf input should be named 'configure.ac', not 'configure.in'

    注:在这个地方有可能会提示config.h.in未找到,先运行一下autoheader,再运行automake --add-missing

    -> ls

    aclocal.m4 autoscan.log configure depcomp install-sh Makefile.in
    autom4te.cache compile configure.in hello.c Makefile.am missing

     

    注:zutoheader命令,负责生成config.h文件。该工具通常会从acconfig.h文件中复制用户附加的符号定义,因为这里没有附加符号定义,所以不需要创建acconfig.h文件。

    9. 执行命令 ./configure,生成Makefile

    root@localhost:autotools# ./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... gawk
    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
    root@localhost:autotools# ls
    aclocal.m4      autoscan.log  config.log     configure     depcomp  install-sh  Makefile.am  missing
    autom4te.cache  compile       config.status  configure.in  hello.c  Makefile    Makefile.in

    10. 执行命令make all,即可生成对应的hello可执行程序。

    make install ---把该程序安装到系统中

    make clean --清除编译生成的可执行文件和目标文件

    make dist --将程序和相关文档打包成一个压缩文档,以便发布

    具体流程如下图所示

  • 相关阅读:
    操盘之王 摘要
    转贴:Icon Design Guidelines, Android 2.0
    低端用户反文化这个问题真这么简单?
    关于沟通的一些细节(二)主动权
    不仅仅是开发控件《道不远人深入解析ASP.NET 2.0控件开发》作者序
    partition生成规则
    linux send与recv函数详解
    exec函数族实例解析
    在ubuntu 下 编译 在windows 下面使用的adb
    Android属性之build.prop生成过程分析
  • 原文地址:https://www.cnblogs.com/hjj801006/p/12987587.html
Copyright © 2020-2023  润新知