• Linux下automake应用


    Linux下automake应用

      linux 环境下,当项目工程很大的时候,编译的过程很复杂,所以需要使用 make 工具,自动进行编译安装,但是手写 makefile 文件比较复杂,所幸在 GNU 的计划中,设计出了一种叫做 Autoconf/Automake 的工具,用来自动生成 makefile 文件,为编译和安装程序提供了一个方便快捷的入口。
      Automake 是一种帮助『自动』产生 Makefile 文件的软件,并且让开发出来的的软件可以象 Apache,MySQL 和常见的 GNU 软件一样,程序设计者只需要写一些预先定义好的宏 (macro),提交给Automake处理后会产生一个可以供 Autoconf 使用的 Makefile.in文件。再配合利用 Autoconf产生的自动配置设置文件 configure 即可产生一份符合 GNU Makefile 惯例的 Makeifle 了。
      Makefile 基本结构虽然很简单,但是妥善运用这些规则就可以变换出许多不同的花样。却也因为这样,许多刚刚开始学习写Makefile 时会觉得没有规范可以遵循,每个人写出来的Makefile都不大一样,不知道从哪里下手,而且常常会受到自己的开发环境的限制,只要环境参数不同或者路径更改,可能 Makefile 就得跟着修改修改。虽然有 GNU Makefile Conventions (GNU Makefile惯例例)订出一些使用 GNU 程式设计时撰写 Makefile 的一些标准和规范,但是内容很长而且很复杂,并且经常作一些调整,为了减轻程序开发人员维护Makefile 的负担,因此出现了Automake。
      无论是在 Linux 还是在 Unix 环境中, make 都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到 make 或 make install。利用 make 工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用 make 和 makefile 工具就可以轻而易举的理顺各个源文件之间纷繁复杂的相互关系。

     2.Ubuntu下make和automake工具安装

    [wbyq@wbyq shared]$ sudo apt-get install make 
    [wbyq@wbyq shared]$ sudo apt-get install automake
    
    • 1
    • 2

      注意:automake工具配置生成Makefile文件时会生成连接文件,所以不能在共享路径去配置生成Makefile文件。

     2.automake构建生成Makefile示例

      源码和目录结构:
    在这里插入图片描述
      automake构建生成Makefile流程:
    在这里插入图片描述

     2.1 执行autoscan命令

      执行autoscan生成configure.scan,将configure.scan重名名为configure.ac,编辑configure.ac文件。

    [wbyq@wbyq shared]$ ls
    autoscan.log  configure.scan  include  lib  main.c  src
    [wbyq@wbyq work]$ mv configure.scan configure.ac
    [wbyq@wbyq work]$ gedit configure.ac  #修改文件
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

     2.2 执行aclocal命令

      执行aclocal生成configure.scan,生成aclocal.m4 文件。

    [wbyq@wbyq shared]$ aclocal
    ls[wbyq@wbyq shared]$ ls
    aclocal.m4      autoscan.log  include  main.c
    autom4te.cache  configure.ac  lib      src
    
    • 1
    • 2
    • 3
    • 4

     2.3 执行autoconf生成configure

    [wbyq@wbyq shared]$ autoconf
    [wbyq@wbyq shared]$ ls
    aclocal.m4      autoscan.log  configure.ac  lib     src
    autom4te.cache  configure     include       main.c
    
    • 1
    • 2
    • 3
    • 4

     2.4 执行autoheader生成config.h.in

    [wbyq@wbyq shared]$ autoheader 
    [wbyq@wbyq shared]$ ls
    aclocal.m4      autoscan.log  configure     include  main.c
    autom4te.cache  config.h.in   configure.ac  lib      src
    
    • 1
    • 2
    • 3
    • 4

     2.5 创建Makefile.am文件

      创建Makefile.am文件,编辑Makefile.am。

    [wbyq@wbyq shared]$ touch Makefile.am
    
    • 1

      Makefile.am文件内容:

    AUTOMAKE_OPTIONS=foreign #指定协议规范
    bin_PROGRAMS=app  #生成的可执行文件
    #AUTOMAKE_OPTIONS = subdir-objects 
    app_SOURCES=main.c $(top_srcdir)/src/my_du.c $(top_srcdir)/src/my_cat.c $(top_srcdir)/src/my_cp.c
    AM_CPPFLAGS=-Iinclude #指定头文件路径
    #编译动态库
    lib_LTLIBRARIES=libmyfile.la #动态库名
    libmyfile_la_SOURCES=$(top_srcdir)/src/my_du.c $(top_srcdir)/src/my_cat.c $(top_srcdir)/src/my_cp.c #生成动态库依赖文件
    libmyfile_la_CPPFLAGS=-I$(top_srcdir)/include #依赖头文件路径
    #编译静态库
    lib_LIBRARIES=libmyfile.a
    libmyfile_a_SOURCES=$(top_srcdir)/src/my_du.c $(top_srcdir)/src/my_cat.c $(top_srcdir)/src/my_cp.c
    #打包头文件
    include_HEADERS=$(top_srcdir)/include/*
    #实例文件
    data_DATA=$(top_srcdir)/main.c
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

      PROGRAMS:表示可执行文件
      LIBRARIES:表示静态库文件
      LTLIBRARIES:表示动态库文件,前面的 LT 表示 libtool。
      HEADERS:头文件。

     2.6执行automake --add-missing生成Makefile.in文件

      注意:当创建动态库时,需要在执行 automake --add-missing之前需要执行libtoolize -f -c
      若没有libtool工具则在线安装:sudo apt-get install libtool

    [wbyq@wbyq shared]$ libtoolize -f -c
    [wbyq@wbyq shared]$ automake --add-missing
    
    • 1
    • 2

     2.7 执行configure生成Makefile

    [wbyq@wbyq shared]$ ./configure --prefix=$PWD/_install --enable-shared --enable-static 
    
    • 1

      --prefix=$PWD/_install   ----指定安装路径
      --enable-shared   ----编译生成动态库
      --enable-static   ----编译生成静态库

     2.8 编译安装make && make install

    [wbyq@wbyq shared]$ make && make install
    
    • 1

      编译生成文件信息:
    在这里插入图片描述

  • 相关阅读:
    算法金 | 通透!!十大回归算法模型最强总结
    Docker | 常用命令——排错很有帮助
    XC5013 马达驱动和充电集成一体的控制芯片 一档输出芯片
    stm32中的中断优先级
    【Java 基础篇】Java TreeSet 详解:红黑树实现的有序集合
    IntelliJ IDEA - Maven 在控制台Maven编译正常,但是在IDEA中不正常,表现不一致
    【无标题】
    Python 办公自动化之 PDF 操作详解
    gateway网关
    21. 从零用Rust编写正反向代理,tokio竟然这样对待socket!
  • 原文地址:https://blog.csdn.net/weixin_44453694/article/details/126310880