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. 低功耗4G模组:MQTT通信功能

    ​ 今天我们来学习使用合宙Air708E开发板的MQTT通信基本功能. 一.MQTT介绍 MQTT是一种低开销.低带宽占用的即时通讯协议,可以用极少的代码和带宽为远程设备提供实时可靠的消息服务.它适用 ...

  2. Go获取文件路径,文件名,后缀

    import ( "fmt" "os" "path/filepath" "path" ) files := " ...

  3. Windows远程登录到VirtualBox安装的Ubuntu11.10

    一.环境 本地:Windows xp 虚拟机:VirtualBox 虚拟机的操作系统:Linux-Ubuntu11.10 二.目的 在Windows下通过SecureCRT(putty也可)远程登录到 ...

  4. Avalonia UI 中 Styles 与 ControlTheme 的区别

    目录 目录 介绍 使用方式 全局主题 (Global Theme) 局部主题 (Local Theme) 控件主题 (ControlTheme) 问题描述 问题分析 问题1 区别 问题2 重写Temp ...

  5. redis之性能优化

    1 redis-cli命令的 --stat选项 关于stat选项,官网也是介绍的比较简单.使用redis-cli命令加上stat选项可以实时监视redis实例,比如当前节点内存中缓存的 key总数以及 ...

  6. 理解Java FutureTask

    FutureTask实现的功能 它的功能就像他继承的接口一样:Runnable与Future.他实现了一套机制将两者连接起来. Runnable主要方法是run(),用于执行一些程序. Future主 ...

  7. Electron(1) - 快速入门

    1.前言 本节主要讲述Electron的环境搭建以及如何快速创建一个应用 官方文档 2.环境搭建 (1)安装node.js (2)创建项目目录,初始化配置文件 //进入项目目录 并在此目录打开cmd窗 ...

  8. 使用SELECT…INTO OUTFILE导出文本文件

    ​MySQL数据库导出数据时,允许使用包含导出定义的SELECT语句进行数据的导出操作.该文件被创建到服务器主机上,因此必须拥有文件写入权限(FILE权限)才能使用此语法."SELECT.. ...

  9. 远程连接利器:玩转MobaXterm

    今天这篇文章轻松不烧脑,主要是想和大家分享一下我在工作中常用的远程管理工具--MobaXterm.这款工具不仅功能强大,而且在日常的远程操作中极为高效,特别适合用来管理远程服务器.MobaXterm结 ...

  10. Vue项目报TypeError: Cannot read properties of undefined (reading '_wrapper')

    前情 最近在做一个营销活动的时候,我选择了Vue技术栈来开发. 坑位 项目看似一切都正常,但当我在绑定的js事件中去修改当前组件的data上的值时会报错:TypeError: Cannot read ...