• 使用 autotools 生成包含多文件的 Makefile




    Configure,Makefile.am, Makefile.in, Makefile文件之间关系

    使用 autotools 生成包含多文件的 Makefile 

        1.实验目的 

        通过使用autotools生成包含多文件的Makefile,进一步掌握autotools的正确使用方法。 
    同时,掌握Linux下安装软件的常用方法。 

        2.实验过程 

      (1)在原目录下新建文件夹auto。 
      (2)在目录下建立两个代码文件“hello.c”和“hello.h”。 
      (3)使用autoscan生成configure.scan。 
      (4)编辑configure.scan,修改相关内容,并将其重命名为configure.in。 
      (5)使用aclocal生成aclocal.m4。 
      (6)使用autoconf生成configure。 
      (7)使用autoheader生成config.in.h。 
      (8)编辑Makefile.am。 
      (9)使用automake生成Makefile.in。 
      (10)使用configure生成Makefile。 
      (11)使用make生成hello可执行文件,并在当前目录下运行hello查看结果。 
      (12)使用makeinstall将hello安装到系统目录下,并运行,查看结果。 
      (13)使用makedist生成hello压缩包。 
      (14)解压hello压缩包。 
      (15)进入解压目录。 
      (16)在该目录下安装hello软件。 

        3.实验步骤 

      (1)mkdir./auto。 
      (2)建立hello.c和hello.h。 

     #ifndef _HELLO_H
     #define _HELLO_H

    #include <stdio.h>
    //int fun();
    #endif

    #include "hello.h"
     int main(int argc, char** argv)

    {
            printf("Hello, Linux World!\n");
    //      fun();
            return 0;
    }

    (3)命令:autoscan。 

    (4)使用Vi编辑configure.scan为:

     


    #                                               -*- Autoconf -*-

    # Process this file with autoconf to produce a configure script.AC_PREREQ([2.66])
    AC_INIT(hello, 1.0)
    AM_INIT_AUTOMAKE(hello, 1.0)
    AC_CONFIG_SRCDIR([hello.h])
    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 版本,如本例使用的版本 2.59。 
        AC_INIT 宏用来定义软件的名称和版本等信息,在本例中省略了 BUG-REPORT-ADDRESS, 
    一般为作者的E-mail。 
         AM_INIT_AUTOMAKE 是笔者另加的,它是 automake 所必备的宏,也同前面一样, 
    PACKAGE 是所要产生软件套件的名称,VERSION 是版本编号。 
         AC_CONFIG_SRCDIR 宏用来侦测所指定的源码文件是否存在,来确定源码目录的有 
        效性。在此处为当前目录下的hello.c。 
         AC_CONFIG_HEADER 宏用于生成 config.h 文件,以便 autoheader 使用。 
         AC_CONFIG_FILES 宏用于生成相应的 Makefile 文件。 
         中间的注释间可以添加分别用户测试程序、测试函数库、测试头文件等宏定义。 
    (5)保存退出,并重命名为configure.in。
    (6)运行:aclocal。 
    生成“configure”可执行文件。
    (7)运行:autoconf,并用ls查看是否生成了configure可执行文件。 
    (8)运行:autoheader。 
     它负责生成config.h.in文件。该工具通常会从“acconfig.h” 
    文件中复制用户附加的符号定义,因此此处没有附加符号定义,所以不需要创建“acconfig.h” 
    文件。

    (9)用Vi编辑Makefile.am文件为: 

    AUTOMAKE_OPTIONS=foreign
     bin_PROGRAMS=hello

    helloworld_SOURCE=hello.c  hello.h

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

    (10)运行:automake —adding-missing。 
    这一步是创建 Makefile 很重要的一步,automake 要用的脚本配置文件是 Makefile.am, 
    用户需要自己创建相应的文件。之后,automake工具转换成Makefile.in。
    在这里使用选项“—adding-missing”可以让automake自动添加有一些必需的脚本文件。
    (11)运行:./configure。 
    通过运行自动配置设置文件 configure,把 Makefile.in 变成了最终的Makefile。
    (12)运行:make。 
    (13)运行:./hello,查看结果是否正确。 
    (14)运行:makeinstall。 
    (15)运行:hello,查看结果是否正确。 
    (16)运行:makedist。
    (17)在当前目录下解压hello-1.0.tar.gz:tar–zxvfhello-1.0.tar.gz。 
    (18)进入解压目录:cd./hello-1.0。 
    (19)下面开始Linux下常见的安装软件步骤:./configure。 
    (20)运行:make。 
    (21)运行:./hello(在正常安装时这一步可省略)。 
    (22)运行:makeinstall。 
    (23)运行:hello,查看结果是否正确。 
    4.实验结果 
    能够正确使用autotools生成Makefile,并且能够安装成功短小的Hello软件。

     from :http://blog.chinaunix.net/space.php?uid=17188120&do=blog&id=2820833

    ============================================================================================ 

     1、在利用autoscan 编写好configure.in文件之后,其中的AM_INIT_AUTOMAKE(PACKAGE, VERSION)语句中,PACKAGE是你的软件包名字,在利用make dist自动获取用于发布的软件包时,就是这里所指定的名字。VERSION代表发布软件包的版本号。例如AM_INIT_AUTOMAKE(hello, 1.0)在make dist所生成的软件包名称为hello-1.0.tar.gz。


      2、在编写Makefile.am文件时
      bin_PROGRAMS是指定我们所要产生的可执行文件的文件名。如果你需要一次性地产生多个可执行的文件,那么需要将各个可执行文件名在其后列出,并用空格隔开。例如,你要产生server和client两个可执行程序,书写如下: 

      bin_PROGRAMS=server client
      helloworld_SOURCES=helloworld.c

      $bin_SOURCES 是指定产生可执行的文件时所需要的相关源代码。其中$bin代表要生成的可执行文件。

      如果有多个源文件与其相关联,则用空格将它们分隔开。同时,若要产生多个可执行文件时,对应的每个可执行文件都要定义相对应的$bin_SOURCES。例如,要产生两个可执行文件server和client除源文件server.c和client.c外,还分别与unp.h ,wr.c相关联,则写法如下:

      server_SOURCES=server.c unp.h
      client_SOURCES=client.c wr.c

      3、./configure之后生成makefile文件,此时执行make就可以生成两个可执行文件server和client 。如果执行make dist命令,则此命令将相关文件打包成 名为PACKAGE-VERSION.tar.gz的压缩文件用来作为发布的软件包。

     from:http://www.linuxdiyf.com/viewarticle.php?id=86021

    for more

    Using C/C++ libraries with Automake and Autoconf

    automake生成动态链接库
  • 相关阅读:
    kali linux DDos攻击
    js基础接替上回的作用域
    js基础的知识函数和作用域
    写作是最好的思考
    eclipse 常用操作(转载)
    网页中用jquery validate 验证表单输入项
    eclipse5.5添加反编译插件
    velocity 实现td 中月份的多选框
    LinckedhashMap原理
    api服务端接口安全
  • 原文地址:https://www.cnblogs.com/no7dw/p/2716515.html
Copyright © 2020-2023  润新知