Makefile的写法

Makefile的基础知识,看这篇就够了! 大家好,我是杂烩君。 本次我们来介绍关于Makefile的一些知识。 什么是make、Makefile? make是一个 构建工具,主要用于C/C++项目。 Makefile是一个编译脚本,使用 make 工具解释Makefile(makefile)文件中的指令(编译指令)进行我们的项目编译。 在Linux环境下进行开发,工程源文件较少时,直接使用gcc进行编译。源文件较多及工程复杂时,就可以使用 Makefile(makefile) 来对我们的工程进行管理,然后使用 make 工具解释Makefile(m 阅读详情
Makefile是定义编译规则的文件,可以完成自动判断,选择编译功能,亦能减少手动处理工作量。之前对Makefile总是使用最熟悉的简单方式,觉得还是需要对细节再深入了解下。
Makefile的基本功能
Makefile是用来定义编译规则的脚本文件,采用make程序可理解的格式编写,一般计算机程序能理解语言总是通过最基本的变量、运算符、顺序、条件选择、循环等语法方式来表达。由于Makefile是用于帮助编译的脚本,理解下编译的基本过程,对我们有所帮助,一般编译可分为预处理、编译扫描、汇编扫描、链接处理等过程。所谓预处理主要是头文件、宏定义等处理,所以在Makefile中编译命令有时需要携带相应的宏定义;编译扫面即需要将相应高级语言处理生成汇编语言;汇编扫面是生成相应二进制文件过程,如.obj/.o;链接处理包括生成库文件、可执行文件等,如静态.a .lib,动态dll so以及可执行的exe文件等。
Makefile编写基本规则
Make程序可以根据目标文件和源代码文件的时间变化来选择需要编译的文件,以减少全部编译所需要的工作量。其最基本的格式采用如下,其中目标文件即为中间生成目标或最终生成目标;伪目标用来表示那些没有相应生成文件的目标。伪目标的使用方法实在,相应目标依赖规则前面加上.PHONY : 目标1 目标2 ...,常见清除目标文件的make clean命令,clean即可定义为伪目标。同一语句,多行之间可以通过 \进行连接。
#此符号用来在makefile中进行注释
inlucde <filename> #用来包含其他make规则文件,如果使用-include和sinclude功能一致
目标 ...:依赖文件 ...
[tab符][@]命令 #如果带有@符号,将不回显相应make命令行
[tab符][@]命令1;命令2 #命令2依赖命令1执行后执行
...
而使用Makefile需要相应的make环境,调用时使用 make + 目标的调用方式。当然make环境可以自动推倒某些规则,如依赖.o文件,可以使用隐含规则通过相应.c来生成,在编写makefile时可以省略掉一些推导过程。
Makefile中的变量定义与传递
Makefile中的变量可以理解为c语言中的宏,赋值时使用 变量名 = ...的方式,而引用时使用 $(变量名)的表达方式。=前面使用的变量可以在文件后面定义,而:=不可以,当然=也会带来递归问题。变量值的替换方法 x : = $(y: .o=.c)则将y中的.o换成.c后赋值给x。而由于make中的变量更像是宏,所以变量值亦可做为变量名处理。多行变量定义方式: define ... endef的方式。关于变量传递,传递变量到下级Makefile中export <variable ...>;不让变量传递到下级Makefile,使用unexport <variable ...>。Makefile中存在一些自动化变量,定义如下
Makefile中的运算符
判断/选择条件以及循环处理方式
ifeq/ifneq/ifdef/ (变量,value)
...
else
...
endif
亦可以使用if函数,循环函数foreach,具体方式参考函数调用。
函数调用
函数的基本调用方式为$(<function> <arguments>), 多个参数之间用逗号分割,常用函数如下。
隐含规则
隐含规则的作用是指不需要显示调用生成目标文件,而是make中有一些隐藏依赖规则,如.c生成.o文件;当然隐含规则可以使用不同命令重载,亦可重建依赖规则。c语言编译环境下.o文件的目标依赖可自动推导为.c文件,并且使用命令$(CC) -c $(CPPFLAGS) $(CFLAGS)。隐含规则使用到的一些命令和参数,定义如下
匹配符、通配符等特殊符号

5nm制程的CV5芯片实测:用它给无人机做8K拍摄和实时避障,功耗和性能到底怎么样? 本文深度评测了5nm制程的CV5芯片在无人机8K拍摄和实时避障中的表现。通过实测数据展示了CV5的异构计算架构、8K视频编码性能和CVflow®AI引擎的加速效果,同时提供了开发中的优化技巧和散热建议,为无人机开发者提供了实用的参考。 阅读详情

相关推荐

[华为]华为无线控制器AC6508简单配置实例

用户需求:3个地址段,分别是领导、员工、访客,访问控制策略是只允许访客上网,不允许访客访问内网。 vlan173为设备的管理地址和AP获取的地址,领导、员工、访客的vlan分别是vlan131/vlan132/vlan133 首先是许可的下载,使用华为的账号登陆http://app.huawei.com/isdp ,然后按照说明输入许可,下载许可,将许可导入到设备。 web界面访问后,直接按照配置向导配置就可以了。 1.基本配置里主要配置license、设备名称、设备时间 2.端口配置:连接上

日子_很简单 2万+

makefile(详细讲解)

1.makeflie 2.多个文件执行makefile

li1829146612的博客 6715

中移物联ML307C模组OPENCPU笔记2

本文介绍了如何编译和运行一个DEMO程序,以官方SDK为例。

weixin_43700831的博客 1883

makefile详解

想要掌握makefile,首先需要了解两个概念,⼀个是⽬标(target),另⼀个就是依赖(dependency)。⽬标就是指要⼲什么,或说运⾏ make 后⽣成什么,⽽依赖是告诉 make 如何去做以实现⽬标。在 Makefile 中,⽬标和依赖是通过规则(rule)来表达的。 上面Makefile 中的 all 就是我们 的⽬标,⽬标放在‘:’的前⾯,其名字可以是由字⺟和下划线‘_’组成 。echo “Hello World”就是⽣成⽬标的命令,这些命令可以是任何你可以在你的环境中运⾏的命令以及 mak

szembed的博客 5928

zabbix5+dify+ollama+deepseek+企业微信 本地部署实现故障智能分析

zabbix5告警信息deepseek自动分析

slc14211421的专栏 3072

Security Onion的部署(超详细)

本文介绍了开源入侵检测系统securityonion的部署

qq_72583325的博客 6067

Makefile的使用

会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。“自动化编译”:一旦写好(Makef file文件中的‘M’可大写可小写,优先执行小写),只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

qq_36091214的博客 1932

告别C盘爆红!手把手教你将WSL2下的Ubuntu 22.04完整迁移到D盘(附清理指南)

本文详细指导如何将WSL2下的Ubuntu 22.04从C盘无损迁移到D盘,包括导出备份、注销原系统、导入新位置等关键步骤,并提供迁移后的优化配置、开发环境衔接及长期维护技巧,帮助用户彻底解决C盘空间不足问题。

weixin_28698059的博客 472

Makefile介绍

概述 什么是makefile?或许很多Windows的程序员都不知道这个东西,因为那些Windows的集成开发环境(integrated development environment,IDE)都为你做了这个工作,但作为一个好的和专业的程序员,makefile还是要懂。这就好像现在有这么多的HTML编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标签的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。

bleauchat的博客 5883

logisim中,如何设计一个位于十字路口的交通信号灯控制系统?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1342

PrimeTime low power-多电压设计流程(1)

PrimeTime支持使用IEEE 1801统一电源格式(UPF)标准来指定设计的多电压特性。PrimeTime能够在多电压供电和使用set_voltage命令在特定电源网上设置电压值的情况下,正确分析设计的时序。要了解如何使用多电压设计流程,请参考以下内容:- 多电压分析需求- 指定电源连接性- UPF命令- GoldenUPF流程- 多重电源电压分析。

QRBQ 528

Makefile基本写法

Makefile 并没有看上去那么复杂,它有着的语法规则,类似于C语言中通用的函数写法,以函数的概念去理解,可以帮助我们对语法的记忆。 工程文件一般都会由编译器自动生成Makefile,但是日常编程也需要我们去读懂Makefile。 以下内容是我个人对Makefile的一些理解,如有不当,请纠正 下面是一整个Makefile文件的内容,可以将其分为三种结构来看 ALL:=build_ser O...

qq_40278197的博客 737

8、音频运行时系统的架构设计

本文深入探讨了音频运行时系统的分层设计及其优势,包括逻辑层和物理层的功能划分。通过分层设计,开发者可以更轻松地管理和优化音频资源,确保其在不同平台上的高效运行。文章还介绍了平台适配与优化、错误处理与调试以及未来发展方向等内容,为开发者提供了宝贵的参考和指导。

juice的博客 461

makefile 写法学习

make file 语法 targets:prerequisites command $^: 代表所有的依赖文件 $@: 代表目标 $<: 代表第一个依赖文件 命令前加@取消回显 gcc -c 只编译不连接 -g 带可调度信息 -o2 更好的编译连接 -o 优化 -I /directory 指定inclue文件 -static 使用静态库 -wall 生成 -w 不生成警告 -D define ...

风二中的博客 547

IEM模型,地表粗糙度模拟

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

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

嵌入式Linux中Makefile万能写法

《嵌入式Linux中Makefile万能写法》 SRC := ${wildcard *.c} OBJ := ${patsubst %.c, %.o, $(SRC)} CC = arm-linux-gcc CCLINK = arm-linux-ld CFLAGS = -g -c -Wall all: $(OBJ) $(CCLINK) -Wall $^ -o main.bin ...

^_^ 1177

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Makefile的基本写法与范例

chenzhjlf的专栏 503

makefile常用写法和简易写法

先说长用到的-l: 小写的l就是依赖的lib库,lib首字母,很好记。 -L: 引用的三方lib库所在目录,lib首字母大写就是目录,也好记。 -I: 少不了头文件目录,还是老路子,include首字母,大写代表目录下面这些是编译选项: -Wall:提示所有警告 -g: 产生调试信息,应该是gdb的首字母 -c: 就是编译咯,compile首字母 -o: 这个必须有的,就是编译链的输出,

马克之的专栏 2109

多个文件目录下Makefile的写法

多个文件目录下Makefile的写法

weixin_33904756的博客 123

普通子目录下Makefile写法(一)

Makefile写法

rjszcb的博客 271

makefile写法

在例子中说明makefile写法直接举例说明。有如下源程序。/* main.c */ #include "mytool1.h" #include "mytool2.h" int main(int argc,char **argv) { mytool1_print("hello"); mytool2_print("hello"); } /* mytool1.h */ #ifndef _MYT...

chenj_freedom的技术点滴 1260

Linux -【新手必看】Makefile完全指南:4种写法详解+基础语法+变量与函数全解析

本文以简单计算器项目为例,详解了四种常见 Makefile 写法及其区别。第一种直接编译所有源文件,简单但效率低;第二种显式写出每个目标文件的编译规则,效率高但规则繁琐;第三种利用隐式规则简化命令,保持增量编译且更简洁;第四种结合变量、通配符和自动变量,灵活且易维护,是推荐写法。文章还系统介绍了 Makefile 基础语法、变量分类(自定义变量与内置变量)、自动变量($@、$^、$<)、显示规则与隐式规则区别,以及常用函数(wildcard、patsubst、shell)

欢迎来到Petter_Deng的博客 1162

主根目录下Makefile写法(二)

主根目录下Makefile写法(二)

rjszcb的博客 245

Makefile写法

一、Makefile文件的格式: target:prerequisite(目标:依赖文件) command(==命令行的开头一定要用tab键,不能按空格==) 二 规则 1 目标:一般是可执行文件或伪目标 GNU make找寻默认的Makefile的规则是在当前目录下依次找三个文件——“GNUmakefile”、“makefile”和“Makefile”。其按顺序找这三个文件,一旦找...

今生的博客 602

Makefile--写法/教程/实例

其他网址 linux中$()和${}的区别_百度知道make条件判断ifeq,ifneq,ifdef,ifndef_运维_浮白-优快云博客Makefile中使用$$的使用 - LiuYanYGZ - 博客园 Makefile的$@,$^,$<,$?,% 另见《Makefile手册中文版》=>10.5.3 自动化变量 例: test : a.o b.o gcc -o...

IT利刃出鞘的博客 648

普通目录下Makefile编译驱动写法(三)

普通目录下Makefile编译驱动写法(二)

rjszcb的博客 169

makefile的多种写法

如何一步一步写makefile文件,具体的进化过程

汤小萌的博客 937
上一篇: 关于LoRa vs. NB-IoT RTT延时的分析
下一篇: python使用ctypes与C混合编程
究理观心
博客等级 码龄10年 184粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值