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

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

3天内不再提示

关于Makefile自动生成-autotools的使用

ElfBoard 2024-07-25 15:50 次阅读

Linux应用开发中,编写Makefile是一项必备技能,因为它定义了工程中所有文件的编译顺序、规则和依赖关系,决定了哪些文件需要编译以及它们的编译顺序。

虽然对初级开发者而言,编写复杂的Makefile并非日常任务,但遇见需要构建大型软件项目时,利用工具自动生成Makefile就显得尤为关键。接下来,我们将重点介绍一款自动化构建工具——Autotools,帮助开发者高效地管理项目构建流程。

1、安装需要工具

elf@ubuntu:~/work$ sudo apt-get install automake

2、测试程序编写

elf@ubuntu:~/work/autotools$ vi main.c

#include #include #include int main(void) { print(); return 0; }

写好之后保存退出。

elf@ubuntu:~/work/autotools$ vi hello.c

#include #include void print(void) { printf("Hello,ElfBoard!\n"); }

写好之后保存退出。

elf@ubuntu:~/work/autotools$ vi hello.h

#ifndef __HELLO_H__ #define __HELLO_H__ void print(void); #endif

写好之后保存退出。

3、使用autoscan工具生成configure.scan 文件

autoscan将生成一个名为configure.scan的文件,其中包含了自动扫描到的可能需要配置的信息

elf@ubuntu:~/work/autotools$ autoscan elf@ubuntu:~/work/autotools$ ls autoscan.log configure.scan hello.c hello.h main.c

4、修改configure.ac文件

将configure.scan文件重命名为configure.ac,然后进一步编辑该文件。开发者通常会添加更多的配置检查和必要的宏定义,以确保生成的configure 脚本能够正确地检测和配置系统环境。

elf@ubuntu:~/work/autotools$ mv configure.scan configure.ac

修改configure.ac

AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])

修改为

AC_INIT(main,0.0.1, [bug@sounos.org])

其中:FULL-PACKAGE-NAME为程序名称,VERSION为当前版本,BUG-REPORT-ADDRESS为bug汇报地址。

然后添加两句话

AM_INIT_AUTOMAKE AC_CONFIG_FILES([Makefile])

AM_INIT_AUTOMAKE宏用于初始化automake,告诉autotools使用automake工具来管理生成的Makefile。

AC_CONFIG_FILES宏告诉autotools生成哪些文件。在这种情况下,它指定生成一个名为Makefile 的文件。

修改完成的configure.ac如下:

# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) #AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS]) AC_INIT(main,0.0.1, [bug@sounos.org]) AM_INIT_AUTOMAKE AC_CONFIG_SRCDIR([hello.h]) AC_CONFIG_HEADERS([config.h]) # Checks for programs. AC_PROG_CC # Checks for libraries. # Checks for header files. AC_CHECK_HEADERS([string.h]) # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. AC_CONFIG_FILES([Makefile]) AC_OUTPUT

5、执行aclocal

执行aclocal命令会生成aclocal.m4文件,这个文件包含了用于自动配置和构建软件的宏定义和规则。

elf@ubuntu:~/work/autotools$ aclocal

elf@ubuntu:~/work/autotools$ ls aclocal.m4 autom4te.cache autoscan.log configure.ac hello.c hello.h main.c

6、autoconf

autoconf命令根据configure.ac文件生成configure脚本。

elf@ubuntu:~/work/autotools$ autoconf

elf@ubuntu:~/work/autotools$ ls aclocal.m4 autom4te.cache autoscan.log configure configure.ac hello.c hello.h main.c

7、autoheader

autoheader命令用于生成config.h.in文件。这个文件是由configure.ac中的一些宏命令生成的模板文件,它包含了预处理器定义和配置选项,会在configure脚本执行时生成最终的config.h文件。

elf@ubuntu:~/work/autotools$ autoheader

elf@ubuntu:~/work/autotools$ ls aclocal.m4 autom4te.cache autoscan.log config.h.in configure configure.ac hello.c hello.h main.c

8、制作Makefile.am

Makefile.am是用来描述源代码和生成目标之间依赖关系的Automake规则文件

elf@ubuntu:~/work/autotools$ vi Makefile.am

AUTOMAKE_OPTIONS= foreign bin_PROGRAMS= main main_SOURCES= main.c hello.c

9、automake --add-missing

automake --add-missing命令会根据Makefile.am文件生成Makefile.in文件。

elf@ubuntu:~/work/autotools$ automake --add-missing configure.ac:12: installing './compile' configure.ac:7: installing './install-sh' configure.ac:7: installing './missing' Makefile.am: installing './depcomp'

elf@ubuntu:~/work/autotools$ ls aclocal.m4 autom4te.cache autoscan.log compile config.h.in configure configure.ac depcomp hello.c hello.h install-sh main.c Makefile.am Makefile.in missing

10、./configure --host=arm

./configure --host=arm命令会生成Makefile文件。

elf@ubuntu:~/work/autotools$ . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setupcortexa7hf-neon-poky-linux-gnueabi

elf@ubuntu:~/work/autotools$ ./configure --host=arm

11、make生成可执行文件

elf@ubuntu:~/work/autotools$ make

elf@ubuntu:~/work/autotools$ ls aclocal.m4 autoscan.log config.h config.log configure depcomp hello.h install-sh main.c Makefile Makefile.in stamp-h1 autom4te.cache compile config.h.in config.status configure.ac hello.c hello.o main main.o Makefile.am missing

12、将可执行文件拷贝到板子中运行

elf@ubuntu:~/work/autotools$ scp main root@192.168.5.98:/home/root/

root@ELF1:~# ./main Hello,ElfBoard!

执行应用终端打印“Hello,ElfBoard”应用可以正常运行,这证明使用autotools工具生成Makefile是没有问题的。

至此,就完成了Makefile自动生成利器—autotools的运用的介绍。衷心期望这些知识能为正在屏幕前阅读的你带来实质性的帮助,激发你在软件工程领域不断探索与创新。

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

    关注

    5064

    文章

    18992

    浏览量

    302582
  • 开发板
    +关注

    关注

    25

    文章

    4921

    浏览量

    97129
  • Makefile
    +关注

    关注

    1

    文章

    125

    浏览量

    19158
  • autotools
    +关注

    关注

    0

    文章

    4

    浏览量

    6087
收藏 人收藏

    评论

    相关推荐

    求助:eclipse开发嵌入式linux驱动自动生成makefile不能用

    eclipse开发嵌入式linux驱动自动生成makefile不能用,用eclipse开发嵌入式linux驱动,自己写的Makefile没有问题,可以
    发表于 01-29 12:31

    如何调整MPlab-ide生成makefile

    你好!我试图修改MPLAB IDE生成makefile,以便在编译每个文件之前执行代码检查器。我想修改makefile生成器或makefile
    发表于 09-02 13:15

    Makefile编写

    Makefile编写 Makefile编写在很多时候有着很大的作用,那么我们该如何编写呢,下面大家一起来了解一下关于Makefile编写的内容。1. make和
    发表于 11-02 15:59

    怎样使用Autotools自动生成Makefile文件呢

    Makefile工程实践视频课程(第2季):使用Autotools自动生成Makefile...
    发表于 12-23 06:02

    Linux autotools 教程

    ) that want to learn Autotools.This document was updated for the following releases of the Autotools:GNU Autoconf 2.61 (November 2006)
    发表于 10-21 17:12 26次下载

    驾驭Makefile

    驾驭Makefile在网上你能找到很多关于Makefile的学习资料,但绝大部分给你的只是一个知识点,与将Makefile运用到项目中(尤其是大型项目)的差距非常的大。因为,将
    发表于 01-05 17:05 9次下载

    跟我一起学makefile

    关于makefile学习,深入了解嵌入式下makefile的编写
    发表于 05-23 18:21 0次下载

    Linux下C编程基础之使用autotools

    ,尤其对于一个较大的项目而言更是如此。那么,有没有一种轻松的手段生成makefile而同时又能让用户享受make的优越性呢?本节要讲的autotools系列工具正是为此而设的,它只需用户输入简单的目标文件、依赖文件、文件目录等就
    发表于 10-18 14:26 0次下载
    Linux下C编程基础之使用<b class='flag-5'>autotools</b>

    关于Linux 2.6内核Makefile的分析

    的介绍文章都是基于2.4内核的,可以说关于2.6内核Makefile相关的文章凤毛麟角,笔者抽时间完成了这篇分析文章,让读者迅速熟悉Linux最新Makefile体系,从而加深对内核的理解,同时也希望能
    发表于 11-02 10:12 1次下载

    makefile的基本语法

     在Makefile中,最重要的三个概念是:目标(target)、依赖关系(dependency)和命令(command)。目标是指要干什么,即运行make后生成什么;依赖是指明目标所依赖的其他目标;命令则告诉make如何生成
    发表于 11-12 10:15 1.1w次阅读

    Makefile是什么?Makefile工作原理是怎样的?Makefile经典教程免费下载

    Makefile的重要性 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make
    发表于 09-12 17:19 0次下载
    <b class='flag-5'>Makefile</b>是什么?<b class='flag-5'>Makefile</b>工作原理是怎样的?<b class='flag-5'>Makefile</b>经典教程免费下载

    Linux下使用autoconf和automake生成Makefile

    自由软件惯例的Makefile就不那么容易了. 在本文中,将介绍如何使用autoconf和automake两个工具来帮助我们自动生成符合自由软件惯例的Makefile,这样就可以象常
    发表于 04-02 14:41 257次阅读

    嵌入式中的Makefile应用

    使用Makefile来管理程序,负责协调各文件之间的依赖关系和组织生成有用文件。本文参考C语言中文网有关Makefile的教程,http://c.biancheng.net/view/7094.html一....
    发表于 11-03 17:06 11次下载
    嵌入式中的<b class='flag-5'>Makefile</b>应用

    Makefile】简单实用的Makefile模板来了

    【Linux + Makefile】简单实用的Makefile模板来了
    的头像 发表于 08-31 12:46 1866次阅读
    【<b class='flag-5'>Makefile</b>】简单实用的<b class='flag-5'>Makefile</b>模板来了

    Makefile是如何编译代码文件的?

    makefile文件最常用的作用是,告诉make程序,如何来编译以及连接程序,最终生成可执行的二进制文件。
    的头像 发表于 05-18 15:27 4327次阅读
    <b class='flag-5'>Makefile</b>是如何编译代码文件的?