Makefile文件简介

makefile文件简介及简单使用 Make简介: 工程管理器,顾名思义,是指管理较多的文件。 Make工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件的内容来执行大量的编译工作。 Makefile格式 target:dependency_files <TAB> command 例(1) ... 阅读详情

Makefile文件简介

因为编译软件用的是WinAVR,其编译器是鼎鼎大名的开源编译器GCC,开源的东西虽然好用但是想要上手还得有点基本功才行,比如Makefile文件的编写对于那些习惯了KEIL C的人来说就不是很顺手了,在KEIL C等编译器中编译软件将所有编译后台工作都做好了,而WinAVR中还得自己编写Makefile文件,不过还好WinAVR自带一个MFile程序简化了Makefile文件的编写,虽然不用亲自手写Makefile文件,但是学学总是好的。

以下笔记摘自《AVR单片机GCC程序设计》第1.3节

一.目标

make 命令引入了目标(targets)的概念。Makefile 描述文件便是它的第一个目标,make 命

令必须处理至少一个目标,否则不会得出任何结果。正如我们在一个没有默认描述文件的当

前目录下敲入 make 一样,make 会输出以下的结果:

1.在项目描述文件中定义目标

一个目标通常从一行的开头开始,并后跟一个冒号。

最简单的MAKEFILE

#当前目录 D:\AVRGCC\TEST

all:

 @echo hello!

#End makefile

 

all:  便是第一个目标 

调用此描述文件结果:

D:\AVRGCC\TEST>make

hello!

 

2.默认目标(goal)

在上面提到过,如果调用 make 时不指定目标名则 make 总是假设在描述文件中遇

到的第一个目标是默认目标。以下示例可以非常好的说明这一问题。

具有三个目标的 makefile

 

#当前目录 D\AVRGCC\TEST

one:

 @echo one.

Two:

 @echo two.

Three:

 @echo three.

#End makefile

 

调用 1:

D:\AVRGCC\TEST>make

one.

由于在命令行没有指定目标,make 从 makefile中找到第一个目标(one)并执行后既退

出。

 

调用 2:

D:\AVRGCC\TEST>maketwo

two.

由于在命令行明确指定了要执行的目标(two),make  在 makefile 中找到指定的目标,

并执行后退出。

 

调用 3:

D:\AVRGCC\TEST  make three one two

three.

one.

two.

 

命令行指定了三个目标,make 一一寻找并执行。

 

在 makefile中非默认的目标称为可替换的目标,只有默认

的依赖关系时它们才有可能被调用。

二.依赖关系

makefile 文件按如下格式指定依赖关系:

目标 1[目标 2 … ] : [ : ][依赖 1][依赖 2] …

[命令]

 

如下例 

#当前目录 D:\AVRGCC\TEST

one: Two

 @echo one.

Two:

 @echo two.

#End makefile

 

执行结果是:

 d:\avrgcc\test>make

 two.

 one.

 

 Make  首先找到第一个目标 one  ,之后发现目标 one 依赖目标 Two 就先执行 Two 后才

行 one 中的命令。

三.Makefile 内容

makefile 内容可分为如下五种类型

①规则定义

语法:

目标 : 依赖

        命令

        ...

其中目标为一个文件名或以空格分开的多个文件名,可含通配符。

例如:

%.o : %.c

 avr-gcc -c  $<  -o  $@

 

以上规则定义了任意一个以 .o 结尾的文件依赖于相同前缀且以.c 结尾的文件。 并

执行下边的命令获得。

规则中目标和依赖分别为 %.o 和%.c,在目标通配符 “%”  代表任意的字符串,而

在依赖中代表与目标中代表的对应字符串。

②隐含规则

  隐含规则是 make 预先定义的规则,用选项 –r 可取消所有的隐含规则。

  例如对于 C 程序 %.o 可以自动的从 %.c 通过命令

$(CC) -c$(CPPFLAGS) $(CFLAGS)'  生成。

 

③变量

  变量是在 makefile 中描述一字符串的的名称。变量可用在目标、依赖、命令和

makefile 其它部分中。变量名由除‘: ’ 、 ‘#’、 ‘=’之外的字符组成,对大小写敏感。

 

 变量的定义并赋值格式:

变量名 =  变量代表字符串

 变量的引用格式:

 $(变量名) 

例如:

 CC = avr-gcc

     %.o : %.c

  $(CC) -c  $<  -o  $@

 

④命令

  命令部分是由 make 传递到系统的字符格式的命令行的组合,在目标被创建时它们

按顺序一行一行传递到系统并执行。

  字符‘@’开始的命令  在系统的输出中不显示本次的指令行。

⑤注释

字符‘# ’  开头的行为注释行,如果注释需要换行需在行尾加 ‘ \ ’,除包含其它

MAKEFIEL 外在行的任意处可插入注释。

 

自动变量

在 makefile中有一组预定义的变量, 当每一规则被执行时根据目标和依赖重新计算

其值,叫作自动变量。

 

下面列出了常用的几个自动变量 

 

$@  :  在规则中代表目标名,如果规则含有多个目标名它将列举所有目标。

 

$%  :  仅在目标是存档文件的成员时起作用,代表目标。

如目标 foo.a(bar.o)中$@  代表 foo.a $%代表 bar.o

$<  :   在规则中代表第一个依赖文件名

 

$?  :   代表在规则中所有以空格隔开的依赖文件名,如果依赖是存档文件的成员则只

有成员名被列出。

$^  :   代表在规则中所有以空格隔开的依赖文件名,如果依赖是存档文件的成员则只

有成员名被列出。

 

AVR-GCC Makefile 中文翻译 AVR-GCC的MAKEFILE文件的注释 立即下载

相关推荐

拆开一个烧坏的IGBT模块,手把手教你识别过压、过流、过温的“案发现场”

本文详细解析了IGBT模块失效分析的实战技巧,通过观察铝层熔化纹路、焊锡溢出形态等物理痕迹,手把手教你识别过压、过流、过温的典型失效模式。文章提供了从基础工具包到现场快速诊断的完整流程,帮助工程师精准定位IGBT模块失效的根本原因。

weixin_30655569的博客 428

ubuntu下AVR/MEGA16开发

1.编译器,avr-gcc2.makefile 可以直接从winavr中copy过来3.烧写 以MEGA16为例sudo avrdude -p m16 -c usbasp -U flash:w:demo.hex

fengwen_xxx的专栏 515

【TestNG自动化测试框架详解】

TestNG是一款设计测试用例执行流程的测试框架。

weixin_43936332的博客 1542

WinAVR MakeFile分析

以前用习惯了WinAVR的Mfile工具了,其实这个小程序极好写,在分析完Makefile的结构后~以后有时间可以自己用VC6写一个玩玩~以下这篇文档是南京理工大一位网友写的, 大家可以好好看看~#××××××××××××××××××××××××××××××# AVR-GCC makefile 模板 ×# semilog ×# E-mail: semilog@163.c

gnuhpc的专栏 5660

华为灵衢UB总线介绍

华为发布"灵衢"(UB)超节点互联协议,旨在构建支持AI大模型计算的基础设施。该协议采用统一内存语义和对等架构,使设备可直接访问远程内存,实现资源池化。技术突破包括2.1微秒超低时延和TB级带宽,支持64节点、52万张昇腾卡的集群互联。相比传统RDMA,"灵衢"更注重系统级资源调度,而非单纯数据传输。华为开放技术规范,推动生态建设,已有厂商开发兼容IP核。"灵衢"可适应x86、RISC-V等架构,未来将扩展至百万卡规模集群。

技术引领业务创新 4430

R语言深度学习实战:基于YOLO的目标检测

目标检测是计算机视觉领域的一项任务,旨在识别图像或视频中的物体,并确定它们的位置。与图像分类不同,目标检测要求模型能够识别多个物体,并为每个物体提供边界框(bounding box)的位置信息。这种任务在众多应用中都具有重要价值,例如自动驾驶、安防监控、物体跟踪等。YOLO(You Only Look Once)是一种非常流行的目标检测算法,它在速度和准确性之间取得了良好的平衡。与传统的目标检测方法不同,YOLO将目标检测任务视为回归问题,直接从输入图像中预测目标的类别和位置信息。

YOLO 330

makefile文件详解

makefile文件详解

oligaga的博客 3808

一文吃透 SAP HANA Service Broker:原理、架构与落地实践

摘要:SAP HANA Service Broker 作为云原生开发的关键组件,通过标准化流程管理 HDI 容器与服务实例的生命周期,实现数据库资源的自动化配置与安全隔离。它采用服务目录、服务计划和绑定机制,将连接凭据注入应用环境变量,避免硬编码风险。在实际应用中,需根据模块生命周期决定共享或隔离容器,并通过跨容器访问模式实现安全数据共享。典型案例展示了电商平台的多模块协同与SaaS租户隔离场景,验证了其在提升运维效率与安全合规方面的价值。最佳实践强调以生命周期划边界、最小权限原则和HTTPS安全传输,为企

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 228

~/caffe$ make all -j8 Makefile:606: recipe for target '.build_release/cuda/src/caffe/solvers/adam_s

cuda9.0+cudnn7.0.5下,编译caffe 执行出错:   ubuntu@ubuntu-ST-KN:~/caffe$ make all -j8 NVCC src/caffe/solvers/adam_solver.cu NVCC src/caffe/solvers/adagrad_solver.cu nvcc fatal   : Unsupported gpu architect...

sinat_23619409的博客 2824

备考路上的学习笔记:我的软考高级架构师复盘与更新计划

本专栏基于作者备考软考高级系统架构设计师的真实经验,分为考前突击、基础夯实、核心突破、案例实战和论文通关五大模块。内容涵盖计算机体系结构、操作系统、数据库等核心知识,提供案例解析和论文范文。作者承诺持续更新考纲内容、真题复盘及互动答疑,旨在帮助考生系统备考,将个人踩坑经验转化为实用指南,陪伴考生共同完成从知识碎片到体系构建的蜕变历程。

qq837993702的博客 2295

别让 Claude Code 一直问你“能不能执行“:权限配置完全指南

Claude Code 提供了一套精细的权限配置机制,配置好权限设置,可以提速不少。这个小技巧需要掌握一下。

沐风 3845

Makefile简介及如何指定头文件和库文件

初学C/C++时,我们编译源文件时,通常直接敲命令去进行编译。但在实际项目中,源文件非常多,直接敲命令编译就不现实了,这时候就需要用到Makefile,Makefile是一个文本文件,我们只需要提前在Makefile中写好源文件的编译规则,然后直接执行make命令,就可以自动编译。

new9232的博客 1万+

Open3D (C++) 泊松重建【2025最新版】

使用C++版本的Open3D实现点云的泊松重建

点云侠的博客 3077

makefile文件简介及编写

makefile简介 在基于Linux嵌入式系统开发的过程中,构建一个工程中的源文件不计其数,按类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则来制定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的功能操作。因为Makefile就像一个shell脚本一样,其中也可以执行操作系统的命令。Makefile带来的好处就是“自动化编译”。一旦写好了m...

qq_43200387的博客 404

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

自学Linux 6—Makefile 文件简介

  使用 GCC 的命令进行程序编译在单个文件下是比较方便的,当工程中的文件逐渐增多,甚至变得十分庞大的时候,使用 GCC 命令编译就会变得力不从心。Linux 中的 make 工具提供了一种管理工程的功能,可以方便地进行重新编译。 一、一个多文件的工程例子   有一个工程中的文件列表如下图(文件目录结构)所示。工程中共有 5 个文件,在 add 目录中有 add_int.c 和 add_floa...

Change_Improve的博客 529

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

makefile 初探之《文件名函数简介》

dir $(dir &lt;names...&gt;) 名称:取目录函数——dir。 功能:从文件名序列&lt;names&gt;中取出目录部分。目录部分是指最后一个反斜杠(“/”)之前的部分。如果没有反斜杠,那么返回“./”。 返回:返回文件名序列&lt;names&gt;的目录部分。 示例: $(dir src/foo.c hacks)返回值是“src/ ./”。 notdir $(notd...

业精于勤荒于嬉 404

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Makefile文件编写简介

 Makefile is used to tell make what to do. Most often, makefile tells make how to compile and link a program.A makefile contains five kinds of things as follows:an explicit rule: the formate of th

superholy1982的专栏 716

Makefile语法简介及编译多个文件实例

1.本例由 main.c one.c two.c three.c main.h 四个文件组成:编写Makefile执行程序 /************ FileName: main.c ***************/ #include <stdio.h> #include "main.h" int main() { myone(); mytwo(); my...

jzj_c_love的博客 355

简介make命令和makefile文件

一、为什么要用到 make 命令和 makefile 文件   在 Linux 下编写一个程序,每次编译都需要在命令行一行一行的敲命令。如果是一个很小的程序还好说,命令不怎的复杂,编译速度也挺快,但是对于大型程序来说,这样无疑很麻烦,且不说可能会敲错命令,有时候仅仅改动了一个小地方,却需要将整个程序全部重新编译一遍,显然很浪费时间。Linux 提供了 make 命令来解决上述问题,它会在必要时重...

weixin_33726318的博客 333

make命令与Makefile文件简介

Make工程管理,就是管理工程项目中的几个文件。大家在平时的练习中,编译的文件个数一般不超过五个,即使有几个文件进行了更改,也只需要对其重新编译即可。 但是工程若由成百上千个文件组成,而只有其中个别文件进行了修改,如果此时不知道哪几个文件被更改了,就只能用gcc把所有的文件重新编译一遍,这样大大降低了效率。所以Make工程管理器便应运而生了,它可以自动识别更新了的文件代码,只对更新的文件进行编译。这里的自动指的是能够根据文件时间戳自动发现哪个文件更新过。 make工程管理器主要是通过一个叫Makefile的

mlc741295821的博客 307

Makefile文件编写及make命令使用简介

概述在Linux(unix)环境下使用GNU 的make工具能够比较容易的构建一个属于你自己的工程,整个工程的编译只需要一个命令就可以完成编译和连接。make是一个命令工具,它解释Makefile中的指令(应该说是规则)。在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。make执行时,根据Makefile的规则检查文件的修改情况,决定是否执行定义的动作(那些修改过的文件将会被重新

guotianqing的博客 3236

易上手的Makefile文件简介与基本语法

简单的概括一下Makefile 中的内容,它主要包含有五个部分,分别是:显式规则说明了,如何生成一个或多的的目标文件。这是由 Makefile 的书写者明显指出,要生成的文件,文件的依赖文件,生成的命令。由于我们的 make 命名有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地简略地书写 Makefile,这是由 make 命令所支持的。在 Makefile 中我们要定义一系列的变量,变量一般都是字符串,这个有点像C语言中的宏,当 Makefile 被执行时,其中的变量都会被扩展到相应的引用位置上。其包

哇咔咔的博客 370
上一篇: Ubuntu 12.04系统环境利用USB下载程序到TQ2440开发板
下一篇: LCD12864液晶显示屏串行方式驱动详解
飞行的鱼
博客等级 码龄20年 59粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值