• CentOS下的Autoconf和AutoMake(实践篇) 2


    阅读过《Linux下的Autoconf和AutoMake(理论篇)》之后,进入到实践环节。
    实验环境:CentOS release 6.7 (Final) x64

    1.检查一下这4个工具是否准备妥当(automake/autoconf/m4/perl),如果系统没有预安装的话则使用yum install进行安装。
    下面列出本实验环境下的各软件版本,不同版本可能会存在不一致的情况。
    automake (GNU automake) 1.11.1
    autoconf (GNU Autoconf) 2.63
    m4 (GNU M4) 1.4.13
    This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi
    ltmain.sh (GNU libtool) 2.2.6b #生成静态库的时候需要使用,本篇不使用

    2.创建一个新的实验文件夹test_makefile,并进入该文件夹
    命令:
    mkdir test_makefile
    cd test_makefile

    3.创建一个mysqrt.c的源文件,代码如下(注意复制拷贝的代码是否完整):

    #include<stdio.h>
    #include<math.h>
    int main()
    {
      int i=0;
      printf("Please input an integer value: "); //提示输入一个整形的数
      scanf("%d",&i);
      printf("sqrt(%d)=%f ",i,sqrt(i)); //这里需要链接到数学库-lm
    }

    ————-以下开始configure的步骤————-

    4.执行命令:autoscan
    此时在test_makefile文件夹中生成文件configure.scan。

    5.将configure.scan文件重命名为configure.in

    6.修改configure.in文件内容
    ①修改前内容

    #                                               -*- Autoconf -*-  
    # Process this file with autoconf to produce a configure script.  
                                                                      
    AC_PREREQ([2.63])                                                 
    AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])     
    AC_CONFIG_SRCDIR([mysqrt.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_CHECK_FUNCS([sqrt])                                            
                                                                      
    AC_OUTPUT

    ②修改后内容(注意复制拷贝的代码是否完整)

    #                                               -*- Autoconf -*-    
    # Process this file with autoconf to produce a configure script.    
                                                                        
    AC_PREREQ([2.63])  #要求autoconf的版本                                                
    AC_INIT(mysqrt, 1.0, [])  #修改里面的内容。FULL-PACKAGE-NAME:程序的名称 VERSION:版本 BUG-REPORT-ADDRESS:错误报告地址;(这里[]表示留空)                                      
    AM_INIT_AUTOMAKE(mysqrt,1.0) #增加这一行,是automake所必备宏,2个参数和以上的FULL-PACKAGE-NAME和VERSION一致
    AC_CONFIG_SRCDIR([mysqrt.c]) #检查源文件是否存在                                       
    AC_CONFIG_HEADERS([config.h]) #生成config.h文件(由于不存在这个文件,后面需要使用autoheader命令来生成)
                                                                        
    # 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_CHECK_FUNCS([sqrt])                                              
                                                                        
    AC_OUTPUT(Makefile) #修改这一行,指定生成Makefile文件

    7.执行命令:aclocal
    生成文件aclocal.m4

    8.执行命令:autoconf
    生成文件configure

    ————-以上为生成文件configure的步骤————-

    ————-以下为生成文件Makefile.in的步骤————-
    9.新增一个Makefile.am空文件,并增加如下内容:(注意复制拷贝的代码是否完整)

    AUTOMAKE_OPTIONS=foreign  #设定automake的选项
    bin_PROGRAMS=mysqrt #定义要产生应用程序的名称
    mysqrt_SOURCES=mysqrt.c  #源文件以及头文件
    mysqrt_LDADD=-lm  #数学库,可简写为LDADD=-lm

    10.执行命令:autoheader
    生成文件config.h.in

    11.执行命令:

    automake --add-missing

    生成文件Makefile.in

    ————-以上为生成文件Makefile.in的步骤————-

    12.到此处,所必须的Makefile.in文件和configure文件都准备完成了。
    执行命令:./configure
    生成文件Makefile

    13.执行命令:make
    生成执行文件mysqrt

    14.执行应用程序:./mysqrt
    输入一个整数,可得到正确的结果。

    PS:
    ①修改configure.in或Makefile.am文件,切记重新走一次对应的流程
    ②修改头文件或源文件后,切记先make clean一次,再重新make

    (转帖整理)Linux下的Autoconf和AutoMake(理论篇) 1

    CentOS下的Autoconf和AutoMake(完善篇) 3

  • 相关阅读:
    A survey of best practices for RNA-seq data analysis RNA-seq数据分析指南
    DART: a fast and accurate RNA-seq mapper with a partitioning strategy DART:使用分区策略的快速准确的RNA-seq映射器
    中科院生物信息学题目整理
    生物信息学题目整理: 陈润生
    第六章 Windows应用程序对键盘与鼠标的响应 P121 6-8
    第七章 资源在Windows编程中的应用 P157 7-8
    第四章 Windows的图形设备接口及Windows绘图 P83 4-6
    Android Fragment 你应该知道的一切
    Android Fragment 真正的完全解析(下)
    Android Fragment 真正的完全解析(上)
  • 原文地址:https://www.cnblogs.com/chevin/p/5735663.html
Copyright © 2020-2023  润新知