zoukankan      html  css  js  c++  java
  • 自动生存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文件

  • 相关阅读:
    unsupported jsonb version number 123
    如何在MPlayer上支持RTSP
    TDengine 时序数据库的 ADO.Net Core 提供程序 Maikebing.EntityFrameworkCore.Taos
    如何使用IoTSharp对接ModBus?
    如何从源码启动和编译IoTSharp
    Asp.Net Core 自动适应Windows服务、Linux服务、手动启动时的内容路径的扩展方法
    MQTTnet 的Asp.Net Core 认证事件的扩展
    Asp.Net Core 中利用QuartzHostedService 实现 Quartz 注入依赖 (DI)
    The remote certificate is invalid according to the validation procedure 远程证书验证无效
    settings插拔式源码
  • 原文地址:https://www.cnblogs.com/buptmuye/p/3741178.html
Copyright © 2011-2022 走看看