1. make工具和Makefile文件

make是解决大工程编译的工具,描述哪些文件需要编译、哪些需要重新编译的文件就叫做 Makefile,Makefile 就跟脚本文件一样,Makefile 里面还可以执行系统命令。我们使用的时候只需要一个make命令即可完成整个工程的自动编译,极大的提高了软件开发的效率。

Makefile 的引入

如果工程中我们有 main.c、input.c 和 calcu.c 这三个 C 文件和 input.h、calcu.h 这两个头文件。使用gcc命令编译是gcc main.c calcu.c input.c -o main,命令的意思就是使用 gcc 编译器对 main.c、calcu.c 和 input.c 这三个文件进行编译,编译生成的可执行文件叫做 main。编译完成以后执行 使用./main 运行这个程序。

我们这个工程只有三个文件,如果几千个文件呢?其中有一个文件被修改了,使用上面的命令编译的时候所有的文件都会重新编译,编译一次所需要的时间就很长了。最好的办法是确定哪个文件被修改了,只编译这个被修改的文件即可。例如:

 gcc -c main.c
gcc -c input.c
gcc -c calcu.c
gcc main.o input.o calcu.o -o main

前三行分别是将 main.c、input.c 和 calcu.c 编译成对应的.o 文件,使用了“-c”选项,是只编译不链接。最后一行命令是将编译出来的所有.o 文件链接成可执行文件 main。假如我们现在修改了calcu.c 这个文件,只需要将 caclue.c 这一个文件重新编译成.o 文件,然后将所有的.o 文件链接成可执行文件即,只需要下面两条命令即可:

gcc -c calcu.c
gcc main.o input.o calcu.o -o main

但是如果修改的文件很多,容易忘记编译不利于管理,为此我们需要引入Makefile工具:

1、如果工程没有编译过,那么工程中的所有.c 文件都要被编译并且链接成可执行程序。

2、如果工程中只有个别 C 文件被修改了,那么只编译这些被修改的 C 文件即可。

3、如果工程的头文件被修改了,那么我们需要编译所有引用这个头文件的 C 文件,并且链接成可执行文件。

在工程目录下创建名为“Makefile”的文件,文件名一定要叫做“Makefile”!!!且区分大小写!

Makefile 和 C 文件是处于同一个目录的,在 Makefile 文件中输入如下代码:

main: main.o input.o calcu.o
gcc -o main main.o input.o calcu.o
main.o: main.c
gcc -c main.c
input.o: input.c
gcc -c input.c
calcu.o: calcu.c
gcc -c calcu.c clean:
rm *.o
rm main

代码中所有行首需要空出来的地方要使用“TAB”键!不要使用空格键!这是Makefile 的语法要求!

Makefile 编写好以后我们就可以使用 make 命令来编译我们的工程了,直接在命令行中输

入“make”即可,make 命令会在当前目录下查找是否存在“Makefile”这个文件,如果存在的

话就会按照 Makefile 里面定义的编译方式进行编译。

2.Makefile 语法

Makefile 里面是由一系列的规则组成的,这些规则格式如下:

目标…... : 依赖文件集合……
命令 1
命令 2

如上面的规则的目标是 main,main.o、input.o 和 calcu.o 是生成 main 的依赖文件,如果要更新

目标 main,就必须先更新它的所有依赖文件,如果依赖文件中的任何一个有更新,那么目标也

必须更新,“更新”就是执行一遍规则中的命令列表。make 命令会为 Makefile 中的每个以 TAB 开始的命令创建一个 Shell 进程去执行。

最后一个规则目标是 clean,它的功能就是完成工程的清理,它没有依赖文件,因此会默认为依赖文件都是最新的,所以其对应

的命令不会执行,当我们想要执行 clean 的话可以直接使用命令“make clean”,执行以后就会删

除当前目录下所有的.o 文件以及 main.

00.嵌入式笔记——初识make工具和Makefile文件的更多相关文章

  1. make工具与Makefile文件

    make工具与Makefile文件 阅读目录 1. make工具 2. Makefile文件 3. Makefile的简单示例 4. 伪目标 5. Makefile 自动化变量 6. 编译生成多个可执 ...

  2. Linux工具入门:make工具与Makefile文件

    1. make工具 利用make工具可以自动完成编译工作,这些工作包括: 如果修改了某几个源文件,则只重新编译这几个源文件 如果某个头文件被修改了,则重新编译所有包含该头文件的源文件 利用这种自动编译 ...

  3. 使用autoconf和automake生成Makefile文件(转)

    Makefile好难写 曾经也总结了一篇关于Makefile的文章<make和makefile的简单学习>.但是,总结完以后,发现写Makefile真的是一件非常痛苦的事情,的确非常痛苦. ...

  4. 面试题----makefile文件的作用

    make工具和makefile文件 make工具和makefile文件简介 make命令和makefile文件的结合提供了一个在项目管理领域十分强大的工具.它不仅常被用于控制源代码的编译和链接,而且还 ...

  5. 【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42239705  参考博客 : [嵌入式开发]嵌入式 开发环境 (远 ...

  6. 《Go并发编程实战》读书笔记-初识Go语言

    <Go并发编程实战>读书笔记-初识Go语言 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在讲解怎样用Go语言之前,我们先介绍Go语言的特性,基础概念和标准命令. 一. ...

  7. 使用autogen工具生成Makefile遇到问题解决思路

    使用autogen工具生成Makefile,最新的应用程序很多都使用autogen,本着知行合一的精神 最近有空也研究了一下该工具的使用,详细步骤请参考文档: http://blog.csdn.net ...

  8. 4种用于构建嵌入式linux系统的工具_转

    转自:4种用于构建嵌入式linux系统的工具 Linux 被部署到比 Linus Torvalds 在他的宿舍里开发时所预期的更广泛的设备.令人震惊的支持了各种芯片,使得Linux 可以应用于大大小小 ...

  9. linux下使用automake工具自动生成makefile文件

    linux环境下,当项目工程很大的时候,编译的过程很复杂,所以需要使用make工具,自动进行编译安装,但是手写makefile文件比较复杂,所幸在GNU的计划中,设计出了一种叫做Autoconf/Au ...

  10. C++学习笔记25:makefile文件2

    Makefile文件语法 行解析:命令按行解析 命令行的行首字符为Tab键,其他行的行首字符不得为Tab键,但可以使用多个空格缩进 换行:命令太长时,行尾使用"\"换行 注释:行首 ...

随机推荐

  1. python的迭代器和生成器?

    python中的迭代器和生成器都是用来处理数据序列的. 迭代器 迭代器是一个可以记住遍历位置的对象,使用iter()创建一个迭代器,使用next()方法依次返回迭代器中的每一个元素,如果数组里面的数据 ...

  2. Java中的对象池模式

    Java中的对象池模式 Java对象的生命周期分析: Java对象的生命周期大致包括三个阶段: 对象的创建,对象的使用, 对象的清除. 因此,对象的生命周期长度可用如下的表达式表示: T = T1 + ...

  3. golang之常用开发工具

    汇总平常开发中较为常用的工具 [sql2struct] 将MySQL快速生成struct github:  https://github.com/idoubi/sql2struct

  4. Element-UI 中关于 Table 的几个功能点简介(行列的合并和样式、合计行配置等)

    〇.前言 本文记录了关于 Element 框架中 Table 的几个功能点,后续将持续更新. el-table 官网地址:https://element.eleme.cn/#/zh-CN/compon ...

  5. 一款基于 .NET MVC 框架开发、功能全面的MES系统

    前言 今天大姚给大家分享一款基于 .NET MVC 框架开发.功能全面的离散型零部件制造管理系统(MES):EasyMES. 项目介绍 EasyMES一款基于 .NET 6 MVC 框架开发.开源免费 ...

  6. 中电金信:院长寄语|关于源启AI+行动的思考

    自2022年8月19日发布以来,源启已经走上了她第三年的征途.今天,源启已经成为公司战略的支点,中电金信正致力于用"源启底座""源启+咨询""源启+应 ...

  7. [双体系练习]Java基础练习题1

    因为练习是word,本文我只是写了里面的部分内容,如果想查阅完整内容或者获取word以及PDF,请 关注微信公众号 乖乖狼科技 发送口令 akcd T1 静态代码块中不能? · [D ] A. 初始化 ...

  8. https://eggjs.org/zh-cn/basics/env.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E7%8E%AF%E5%A2%83

    转载:https://eggjs.org/zh-cn/basics/env.html#自定义环境 运行环境 一个 Web 应用本身应该是无状态的,并拥有根据运行环境设置自身的能力. 指定运行环境 框架 ...

  9. NACOS MalformedInputException 无法读取中文配置问题

    1. 问题描述 在windows平台中打包运行springboot jar包提示如下错误 在idea中运行正常 org.yaml.snakeyaml.error.YAMLException: java ...

  10. Qt/C++音视频开发80-ffmpeg实现srt推拉流/实时性非常好/音视频同步/支持格式众多

    一.前言 目前互联网上的视频直播有两种,一种是基于RTMP协议的直播,这种直播方式上行推流使用RTMP协议,下行播放使用RTMP,HTTP+FLV或者HLS,直播延时一般大于3秒,广泛应用秀场.游戏. ...