0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux下automake应用

wang123a 来源:嵌入式技术 作者:嵌入式技术 2022-08-24 15:10 次阅读

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

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

 3.automake构建生成Makefile示例

源码和目录结构:

在这里插入图片描述

  automake构建生成Makefile流程:

pYYBAGMFztSAXetpAATh5gXjWDI079.png#pic_center

 3.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  #修改文件
poYBAGMFztSATCtQAAErywcddag715.png#pic_center

 3.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

 3.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

3.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

 2.5 创建Makefile.am文件

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

[wbyq@wbyq shared]$ touch Makefile.am

  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

  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

 2.7 执行configure生成Makefile

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

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

 2.8 编译安装make && make install

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

  编译生成文件信息

pYYBAGMFztSAcG4yAADBX4Fkixs056.png#pic_center

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11219

    浏览量

    208879
  • Makefile
    +关注

    关注

    1

    文章

    125

    浏览量

    19161
收藏 人收藏

    评论

    相关推荐

    Linux开发_Linux进程编程

    介绍Linux进程概念、进程信号捕获、进程管理相关的命令的使用等知识点。
    的头像 发表于 09-17 15:38 1324次阅读
    <b class='flag-5'>Linux</b>开发_<b class='flag-5'>Linux</b><b class='flag-5'>下</b>进程编程

    Linux GCC的编译

    一、Linux 多文件编译 在上一篇 Linux 的 C 编程我们知道了 Linux 的编
    的头像 发表于 09-11 15:18 2503次阅读
    <b class='flag-5'>Linux</b> <b class='flag-5'>下</b>GCC的编译

    如何学习linux的基础知识

    C语言环境概述:Gcc使用方法:Gdb调试技术,Autoconf Automake Makefile,代码优化,熟悉Linux系统的开发环境,熟悉Gcc编译器,熟悉Makefile规则编写Hello,World程序,使用ma
    发表于 08-03 14:28

    Linux的网络HOOK实现

    最近疯狂的研究Linux的种种功能,也颇有心得,这里讲述一Linux的Net的Hook,使用net的Hook可以实现很多很多非常底层的功能
    发表于 05-14 10:27 5122次阅读

    linuxvim使用详解

    linuxvim使用科普教程,供大家学习使用。
    发表于 03-16 15:41 0次下载

    Linux基于Socket的网络编程

    linux开发编程教程资料——Linux基于Socket的网络编程,感兴趣的小伙伴们可以看一看。
    发表于 08-23 16:23 0次下载

    Linux的网络编程总结

    linux开发编程教程资料——Linux的网络编程总结,感兴趣的小伙伴们可以看一看。
    发表于 08-23 16:23 0次下载

    LinuxSocket网络编程

    linux开发编程教程资料——LinuxSocket网络编程,感兴趣的小伙伴们可以看一看。
    发表于 08-23 16:23 0次下载

    linux C编程

    linux C编程
    发表于 10-25 08:54 9次下载
    <b class='flag-5'>linux</b> <b class='flag-5'>下</b>C编程

    LinuxQt的安装

    LinuxQt的安装
    发表于 11-09 17:14 5次下载

    Linux系统软硬链接原理

    Linux系统软硬链接原理
    发表于 11-23 08:49 1次下载

    LINUX系统教程之如何在Linux系统进行编程

    本文档的主要内容详细介绍的是LINUX系统教程之如何在Linux系统进行编程主要内容包括了:程序开发过程 ,Linux编程环境和开发工具 ,Lin
    发表于 12-18 19:09 9次下载

    Linux使用autoconf和automake生成Makefile

     作为Linux的程序开发人员,一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便。一般情况,大家都是手工写一个简单Makefile,如果要想写出一个符合
    发表于 04-02 14:41 258次阅读

    linux添加路由的方法

    linux添加路由的方法:
    发表于 05-26 09:44 3716次阅读
    <b class='flag-5'>linux</b><b class='flag-5'>下</b>添加路由的方法

    linuxnodemcu环境搭建

    构建esp8266编译链sudo apt-get install build-essential zip gdb git vim make unrar autoconf automake
    发表于 10-25 14:51 13次下载
    <b class='flag-5'>linux</b><b class='flag-5'>下</b>nodemcu环境搭建