首页
社区
家园
群组
手机版
开启辅助访问
请登录
注册
搜索
快捷导航
01
社会纵横
02
旅游景点
03
母婴亲子
04
装修杂谈
05
求职招聘
06
房屋租售
07
生活服务
08
生活杂谈
09
网友贴图
10
休闲灌水
11
成都美食
12
家有宠物
13
成都汽车
14
都市情感
15
非常男女
16
婚姻家庭
17
青春校园
18
两性健康
19
征婚交友
20
装修风格
21
物流货运
22
电影交流
23
文学小说
24
音乐视听
22
电视台
23
四川本地
24
本地交流
请
登录
后使用快捷导航
没有帐号?
注册
当前位置:
»
论坛
›
生活社区
›
休闲灌水
›
帖子
返回列表
关于Makefile最基础,最管用的资料
[复制链接]
CloudService
CloudService
当前离线
积分
629
窥视卡
雷达卡
975
主题
975
帖子
629
积分
高级会员
高级会员, 积分 629, 距离下一级还需 371 积分
高级会员, 积分 629, 距离下一级还需 371 积分
积分
629
收听ta
发消息
加好友
打招呼
分享到:
发表于 2022-8-16 11:08:28
|
显示全部楼层
|
阅读模式
接下来让我们从以下几个方面来进行详细的了解吧
make和Makefile的介绍1.1 make工具
利用make工具可以自动完成编译工作。这些工作包括:
如果仅仅修改了某几个源文件,则只重新编译这几个源文件;
如果某个头文件被修改,则重新编译所有包含该头文件的源文件。
利用这种自动编译可大大简化开发工作,避免不必要的重新编译。
1.2 Makefile
make工具通过一个称为Makefile的文件来完成并自动维护编译工作。Makefile文件描述了整个工程的编译、链接等规则。
Makefile基本规则TARGET ...
EPENDENCIES ...
COMMAND
...
目标(TARGET)程序产生的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如clean,也称伪目标。
依赖(DEPENDENCIES)是用来产生目标的输入文件列表,一个目标通常依赖于多个文件。
命令(COMMAND)是make执行的动作(命令是shell命令或者是可在shell下执行的程序)。注意:每个命令行的起始字符必须为TAB字符。
如果DEPENDENCIES中有一个或多个文件更新的话,COMMAND就要执行,这就是Makefile最核心的内容。
接下来就根据这个Makefile基本规则来编写一个最基本的Makefile文件
.PHONY:clean
main:main.o sub.o add.o print.o
gcc -Wall -g main.o add.o sub.o print.o -o main
main.o:main.c
gcc -Wall -g -c main.c -o main.o
add.o:add.c add.h
gcc -Wall -g -c add.c -o add.o
sub.o:sub.c sub.h
gcc -Wall -g -c sub.c -o sub.o
print.o:print.c print.h
gcc -Wall -g -c print.c -o print.o
clean:
rm -f *.o main
我们可以看到,main是我们最终想要生成的目标文件,它依赖main.o sub.o add.o print.o这四个.o文件。因此要执行gcc -Wall -g main.o add.o sub.o print.o -o main命令来生成目标文件,但是当前没有这些.o文件,因此就要先生成这些.o文件。我们写了四条.o:.c然后执行gcc -Wall -g -c .c -o .o,这些语句就会生成目标文件的依赖项。
clean是一个伪目标文件,因为它没有依赖项。我们只是想通过make clean来将.o文件删除,但是我们通常要指定.PHONY:clean这条语句,用来显式的指定clean是伪目标,来防止当前目录下有一个同名的clean文件。这样,一个简单呢的Makefile文件就写好了。
Makefile自动化变量虽然像上述那样可以完成编译,但是明显非常麻烦,接下来介绍Makefile的自动化变量。
选项名作用
$@ ?规则的目标文件名
$< ??规则的第一个依赖文件名
$^ ??规则的所有依赖文件列表
我们使用这些自动化变量来尝试从写刚才的Makefile
.PHONY:clean
OBJ=main.o sub.o add.o print.o
main
(OBJ)
gcc -Wall -g $^ -o $@
main.o:main.c
gcc -Wall -g -c $< -o $@
add.o:add.c add.h
gcc -Wall -g -c $< -o $@
sub.o:sub.c sub.h
gcc -Wall -g -c $< -o $@
print.o:print.c print.h
gcc -Wall -g -c $< -o $@
clean:
rm -f *.o main
我们定义了一个变量叫OBJ,他是我们的依赖项列表。然后使用自动化变量来代替对应的文件,如上所示。
但是,我们这些.c文件都要生成.o文件,这样写也非常麻烦,我们介绍另一些规则。
模式规则
%.o:%.c
后缀规则
.c:.o
我们来使用这两种规则:
.PHONY:clean
CC = gcc
CFLAGS = -Wall -g
OBJ = main.o sub.o add.o print.o
main
(OBJ)
$(CC) $(CFLAGS) $^ -o $@
#%.o:%.c
.c.o:
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -f *.o main
使用这两个规则,就会将所有.c文件生成同名的.o文件,这样,Makefile就更加简洁。
make常用的内嵌函数函数调用
$(function arguments)
$(wildcard PATTERN)
当前目录写的匹配模式的文件
例如:src=$(wildcard *.c)
$(patsubst PATTERN,REPLACEMENT,TEXT)
模式替换函数
例如:$(patsubst %.c, %.o, \$src)
等价于$(src:.c=.o)
shell函数
执行shell命令
例如:$(shell ls -d */)
我是在基于sail-imx6q开发板的linux上实现上述步骤的,感兴趣的小伙伴也可以继续研究一下。
SD-WAN
MPLS VPN
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
显身卡
返回列表
使用
高级回帖
(可批量传图、插入视频等)
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
写好了,发布
Ctrl + Enter 快速发布
回帖并转播
回帖后跳转到最后一页
发帖时请遵守我国法律,网站会将有关你发帖内容、时间以及发帖IP地址等记录保留,只要接到合法请求,即会将信息提供给有关政府机构。
最新资讯
成都再为露营出台专门指引
四川平武4人看涨水因路基垮塌坠落 一名小孩因被抱手上幸未受伤
揭秘“山洞读书男子”身世:16岁患精神疾病,今年五十小学文化,
成都一公司举办减肥比赛,减一斤奖50元!员工:不能让老板失望
四川昨日新增本土确诊病例1例
夜巡龙泉山 从日落到日出的守护
500件纯净水送到环卫工人手里 “文明城市爱心驿站”爱心接力继续
“中华文明探源工程”首席专家王巍:古蜀文明和夏商王朝关系密切
现在的战旗村,是10年前想也想不到的
TA们用奋斗 致敬公园城市建设
女子醉驾遇查躲入足浴店男厕所:超过醉驾标准1倍,已立案调查
兔唇弟弟捡废品卖钱给姐姐看病 :两人都是弃婴,没血缘关系
女子晒老公当爹前后颜值对比,网友看到发量直呼:得亏年轻时找了
97年宝妈晒当妈妈前后对比照,从小仙女到“胖若两人”,一细节网
智能家居的安全清单
安妮海瑟薇芭比粉造型出席时装周 踩恨天高秀美腿少女感满满
杨幂龚俊新剧官宣引发妆造讨论 动画官博发文回应争议
刘昊然扎“小揪揪”发型抵达机场 白T黑裤穿搭简约
杨幂发文悼念陈家林导演 4岁首次演戏合作《唐明皇》
林青霞回应豪宅起火报平安 都好 谢谢关心
Copyright © 2013-2022
成都论坛
(www.chengdubbs.cn)
琼ICP备2022003525号
版权所有 All Rights Reserved.
免责声明: 本站内容是网友自由发布,发布所涉及到的内容与本站无关,本站保持中立,本站不负任何法律责任及连带责任,如果内容侵犯了您的版权,请与管理员联系删除。
快速回复
返回顶部
返回列表