1.10~1.12 Makefile

简介: 1.10~1.12 Makefile

01 什么是Makefile



02 Makefile规则



版本一


app:sub.c add.c mult.c div.c main.c
  gcc sub.c add.c mult.c div.c main.c -o app


版本二


app:sub.o add.o mult.o div.o main.o
  gcc sub.o add.o mult.o div.o main.o -o app
sub.o:sub.c
  gcc -c sub.c -o sub.o
add.o:add.c
  gcc -c add.c -o add.o
mult.o:mult.c
  gcc -c mult.c -o mult.o
div.o:div.c
  gcc -c div.c -o div.o
main.o:main.c
  gcc -c main.c -o main.o


第二个版本编写更麻烦,但是更新依赖文件的时候,不需要全部重新编译


03 工作原理



04 变量



#定义变量
src=sub.o add.o mult.o div.o main.o
target=app
$(target):$(src)
  $(CC) $(src) -o $(target)
sub.o:sub.c
  gcc -c sub.c -o sub.o
add.o:add.c
  gcc -c add.c -o add.o
mult.o:mult.c
  gcc -c mult.c -o mult.o
div.o:div.c
  gcc -c div.c -o div.o
main.o:main.c
  gcc -c main.c -o main.o


有什么用:简化代码


05 模式匹配



再次优化


#定义变量
src=sub.o add.o mult.o div.o main.o
target=app
$(target):$(src)
  $(CC) $(src) -o $(target)
%.o:%.c
  $(CC) -c $< -o $@


06 函数




#定义变量
# add sub.o add.o mult.o div.o main.o
src=$(wildcard ./*.c)
objs=$(patsubst %.c, %.o, $(src))
target=app
$(target):$(objs)
  $(CC) $(objs) -o $(target)
%.o:%.c
  $(CC) -c $< -o $@


#定义变量
# add sub.o add.o mult.o div.o main.o
src=$(wildcard ./*.c)
objs=$(patsubst %.c, %.o, $(src))
target=app
$(target):$(objs)
  $(CC) $(objs) -o $(target)
%.o:%.c
  $(CC) -c $< -o $@
#删除.o中间文件
.PHONY:clean #指定不会生成文件
clean:
  rm $(objs) -f


目录
相关文章
|
机器学习/深度学习 人工智能 自然语言处理
RT-DETR改进策略【模型轻量化】| 替换华为的极简主义骨干网络:VanillaNet
RT-DETR改进策略【模型轻量化】| 替换华为的极简主义骨干网络:VanillaNet
419 0
|
存储 缓存 小程序
微信小程序怎么进行页面传参
微信小程序怎么进行页面传参
463 3
|
JSON 前端开发 JavaScript
解决跨域问题
解决跨域问题
|
开发框架 自然语言处理 .NET
C#一分钟浅谈:LINQ 查询表达式的使用技巧
【9月更文挑战第6天】LINQ(Language Integrated Query)是C#开发中的强大工具,使查询数据集合变得简单且接近自然语言。本文从基础入手,通过具体示例讲解LINQ查询表达式的使用技巧,包括过滤、排序和分组等操作。同时,文章还探讨了常见问题及解决方法,如性能优化、过早枚举和类型转换等,帮助开发者写出更高效、易维护的代码。
323 17
一款好看的导航网HTML源码(全静态页面带特效)
一款好看的导航网源码(全静态页面带特效),页面自适应,单页源码没有后台,需要的下载。
375 1
|
安全 新能源
碳捕获与封存技术:减排的有效途径
【9月更文挑战第29天】全球气候变化日益严峻,碳捕获与封存技术(CCS)作为减排新兴技术,通过捕集、运输和封存三个环节,有效减少二氧化碳排放。本文详细探讨了CCS的技术原理、应用前景及挑战,指出其在减缓气候变化、促进低碳经济和多样化场景中的重要作用,并提出了技术成熟度提升、成本降低及安全性监管等方面的解决方案。
|
前端开发 JavaScript 项目管理
Poetry vs npm:两个包管理器的迷人相似性
我们知道 Python 有自己的生态链。Python 版本也非常多,为了处理这么多的版本造成的包问题,Python 有了虚拟环境。在开始之前本文默认对 Python 的生态有了基础的了解(pip 等等)。 本文全面介绍了 Python 包管理项目管理,虚拟环境管理工具的 Poetry 的基本用法。对比不同的编程语言对包的管理其实都是相似的,Peotry 的与 npm 极为相似,你掌握其中一个另一个基本也熟悉了。
|
存储
DROP TABLE 语句
【7月更文挑战第20天】DROP TABLE 语句。
771 2
|
JavaScript 前端开发
JavaScript中那些值会被转换为false
JavaScript中那些值会被转换为false
329 0
|
Linux 开发者 iOS开发
QT:基于QMediaPlayer制作的视频播放器(最下方有整合包,可直接运行)
QMediaPlayer是Qt多媒体模块中的一个核心类,它提供了播放音频和视频内容的功能。这个类的设计旨在简化跨平台的媒体播放,使得开发者能够在多种操作系统(如Linux、Windows、macOS及移动平台)上轻松集成多媒体播放能力到他们的应用中,而无需关心底层实现细节。以下是关于QMediaPlayer的一些关键点:
860 1

热门文章

最新文章