• 自动生存Makefile教程 autoscan aclocal autoconf autoheader automake configure


    LZ没学过makefile的写法,只知道使用tab。于是乎发现了autotools系列工具

    基本流程是:autoscan、aclocal、autoconf、autoheader、automake、configure

    (1) 使用autoscan命令自动生成configure.scan文件(configure.in原型)

    muye@bupt:~/FFTC/FFTC$ cd test/
    muye@bupt:~/FFTC/FFTC/test$ ls
    Complex_Array.cpp  Complex.cpp  config.h  FFT.h
    Complex_Array.h    Complex.h    FFT.cpp   main.cpp
    muye@bupt:~/FFTC/FFTC/test$ autoscan
    muye@bupt:~/FFTC/FFTC/test$ ls
    autoscan.log       Complex_Array.h  Complex.h  configure.scan  FFT.h
    Complex_Array.cpp  Complex.cpp      config.h   FFT.cpp         main.cpp
    muye@bupt:~/FFTC/FFTC/test$ 

    (2)将configure.scan重命名为configure.in, 并做适当修改

    #                                               -*- Autoconf -*-
    # Process this file with autoconf to produce a configure script.
    
    AC_PREREQ([2.68])
    #AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
    AC_INIT(FFT, 1.0)
    AC_INIT_AUTOMAKE(FFT, 1.0)
    AC_CONFIG_SRCDIR([main.cpp])
    AC_CONFIG_HEADERS([config.h])
    
    # Checks for programs.
    AC_PROG_CXX
    AC_PROG_CC
    
    # Checks for libraries.
    
    # Checks for header files.
    AC_CHECK_HEADERS([stdlib.h])
    
    # Checks for typedefs, structures, and compiler characteristics.
    AC_TYPE_SIZE_T
    
    # Checks for library functions.
    AC_FUNC_MALLOC
    AC_CHECK_FUNCS([clock_gettime pow])
    AC_CONFIG_FILES([Makefile])
    AC_OUTPUT

    说明:

    • 以"#"号开始的行为注释
    • AC_PREREQ宏声明本文要求的autoconf版本, 如本例中的版本 2.65
    • AC_INIT宏用来定义软件的名称和版本等信息, 在本例中省略了BUG-REPROT-ADDRESS, 一般为作者的E-mail
    • AM_INIT_AUTOMAKE是手动添加的, 它是automake所必备的宏, 也同前面一样, PACKAGE是所要产生软件套件的名称,VERSION是版本编号.
    • AC_CONFIG_SCRDIR宏用来侦测所指定的源码文件是否存在, 来确定源码目录的有效性. 在此处指当前目录下hello.c
    • AC_CONFIG_FILES宏用于生成相应的Makefile文件.

    (3) 运行aclocal命令,生成"aclocal.m4"文件

    (4) 运行autoconf命令生成configure可执行文件

    (5) 运行autoheader命令, 生成config.h.in文件

    (6) 新建Makefile.am,内容如下:

    AUTOMAKE_OPTIONS=foreign
    bin_PROGRAMS=fft
    hello_SOURCES=fft.cpp Complex_Array.h FFT.h Complex.cpp main.cpp Complex_Array.cpp Complex.h FFT.cpp

    说明:

    • 其中的AUTOMAKE_OPTIONS为设置automake的选项. 由于GNU对自己发布的软件有严格的规范, 比如必须附带许可证声明文件COPYING等, 否则automake执行时会报错. automake提供了3中软件等级:foreign, gnu和gnits, 供用户选择. 默认级别是gnu. 在本例中, 使用了foreign等级, 它只检测必须的文件.
    • bin_PROGRAMS定义要产生的执行文件名. 如果要产生多个执行文件, 每个文件名用空格隔开
    • hello_SOURCES 定义"hello"这个可执行程序所需的原始文件. 如果"hello"这个程序是由多个源文件所产生的, 则必须把它所用到的所有源文件都列出来, 并用空格隔开. 如果要定义多个可执行程序, 那么需要对每个可执行程序建立对应的file_SOURCES.

    (7) 运行automake命令, 生成Makefile.in文件

    automake --add-missing

    (8)运行configure, 生成Makfefile文件

  • 相关阅读:
    Django REST framework+Vue 打造生鲜超市(七)
    Django REST framework+Vue 打造生鲜超市(六)
    Django REST framework+Vue 打造生鲜超市(五)
    Django REST framework+Vue 打造生鲜超市(四)
    Django REST framework+Vue 打造生鲜超市(三)
    Django REST framework+Vue 打造生鲜超市(二)
    十分钟理解Java中的动态代理
    [020]Sencha Ext JS 6.0使用教程2
    ExtJS6的中sencha cmd中自动创建案例项目代码分析
    Sencha Cmd创建Ext JS示例项目
  • 原文地址:https://www.cnblogs.com/buptmuye/p/3741178.html
Copyright © 2020-2023  润新知