专题 19 Makefile的使用
认识Makefile
Make工具的使用格式:
make[options] [target]
选 项 |
含 义 |
-ffilename |
显式地指定文件作为Makefile |
-Cdirname |
制定make在开始运行后的工作目录为dirname |
-e |
不允许在Makefile中替换环境变量的赋值 |
-k |
执行命令出错时,放弃当前目标,继续维护其他目标 |
-n |
按实际运行时的执行顺序模拟执行命令(包括用@开头的命令),没有实际执行效果,仅仅用于显示执行过程 |
-p |
显示Makefile中所有的变量和内部规则 |
-r |
忽略内部规则 |
-s |
执行但不显示命令,常用来检查Makefile的正确性 |
-S |
如果执行命令出错就退出 |
-t |
修改每个目标文件的创建日期 |
-I |
忽略运行make中执行命令的错误 |
-V |
显示make的版本号 |
Makefile的常用变量:
变量 |
描述 |
$@ |
目标文件名 |
$< |
规则中的第一个文件名 |
$^ |
规则中所有的依赖文件名 |
$? |
规则中日期比目标新的文件列表,用空格隔开 |
$(@D) |
目标文件的目录部分 |
$(@F) |
目录文件的文件名部分 |
在Makefile中,目标名称的指定常常有以下惯例:
all:表示编译所有的内容,是执行make时默认的目标。
clean:表示清除目标。
distclean:表示清除所有的内容。
install:表示进行安装的内容。
Makefile的使用范例
最简单的例子
all:
@echo"+++++++ make all +++++++"
rule0:
@echo"Input = $(INPUT)"
@echo 'This Target is $@'
.PHONY: clean
clean:
@echo"------- clean ------"
Makefile中的依赖关系
all:rule0file.o rule0:rule1 @echo"+++++++ rule0 +++++++" @echo 'The deps:$^' @echo 'The target:$@' rule1:rule2 @echo"+++++++ rule1 +++++++" rule2:rule3 @echo"+++++++ rule2 +++++++" rule3: @echo"+++++++ rule3 +++++++" file.o: @echo"1234567890" > file.o @echo"File path: $(@D) File name : $(@F)" .PHONY: clean rule0 rule1 rule2 rule3 clean: @echo"------- clean ------" rm -f file.o |
Makefile的执行顺序不是按照每条规则书写的先后顺序,而是由规则之间的依赖关系确定的。在Makefile中,将目标cleanrule0 rule1 rule2rule3定义为伪目标(.PHONY),这是由于它们不是需要生成的内容的名称;file.o是实际生成的结果,因此它是真实的目标,而不是伪目标。
Makefile的隐含规则
CC := gcc HEAD := getarg.h SRC := getarg.c writeinfo.o main.c OBJS := getarg.o writeinfo.o main.o TT := test Files:= $(wildcard ./*) INC= . CFLAGS = -pipe -g -Wall -I$(INC) LDFLAGS= -Wall -g all:$(TT) $(TT):$(OBJS) @echo"+++++++ Build Standalone Programe : $@ +++++++" $(CC)$(LDFLAGS) $(OBJS) -o $@ libtest_d.so:getarg.owriteinfo.o @echo"+++++++ Build Dynamic lib : $@ +++++++" $(CC)-shared $(LDFLAGS) getarg.o writeinfo.o -o $@ test_dlib:libtest_d.somain.o @echo"+++++++ Build Exe by Dynamic lib : $@ +++++++" $(CC)$(LDFLAGS) main.o -L. -ltest_d -o $@ filelist: @echo"<<<<<<< Files in this folder >>>>>>" @file$(Files) .PHONY: clean filelist %.o:%c $(CC)$(CFLAGS) -c $< -o $@ clean: @echo"------- clean ------" rm-f *.o rm-f $(TT) rm-f libtest_d.so rm -f test_dlib |
转载于:https://my.oschina.net/fuyajun1983cn/blog/263840
专题 19 Makefile的使用相关推荐
- 远控免杀专题(19)-nps_payload免杀
免杀能力一览表 几点说明: 1.上表中标识 √ 说明相应杀毒软件未检测出病毒,也就是代表了Bypass. 2.为了更好的对比效果,大部分测试payload均使用msf的windows/meterper ...
- 手机APP爬虫[爬虫专题(19)]
<目录> 原理 ...
- [4G5G专题-19]:架构-核心网的演变以及基于服务的5G核心网网络架构
目录 1. 2G GSM核心网架构 2 3G UMTS核心网架构 3 4G LTE核心网架构 4 5G NR 核心网架构 1. 2G GSM核心网架构 2G组网非常简单,只提供语音业务和短消息业务. ...
- [YOLO专题-19]:YOLO V5 - ultralytics代码解析-dataloader数据加载机制
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...
- 远控免杀专题(20)-GreatSCT免杀
转载:https://mp.weixin.qq.com/s/s9DFRIgpvpE-_MneO0B_FQ 免杀能力一览表 几点说明: 1.上表中标识 √ 说明相应杀毒软件未检测出病毒,也就是代表了By ...
- linux解决make依赖关系,makefile 自动处理头文件的依赖关系
现在我们的Makefile写成这样: all: main main: main.o stack.o maze.o gcc $^ -o $@ main.o: main.h stack.h maze.h ...
- FFmpeg音视频开发实战5 iOS/Android/windows/Linux -陈超-专题视频课程
FFmpeg音视频开发实战5 iOS/Android/windows/Linux -159618人已学习 课程介绍 咨询QQ: 347181469. 本课程适合中,从事音视频,网络通 ...
- [kuangbin]各种各样的题单
[kuangbin]各种各样的题单 专题1 简单搜索 POJ 1321 POJ 2251 POJ 3278 POJ 3279 POJ 1426 POJ 3126 POJ 3087 POJ 3414 F ...
- 单链表操作实现getelem_c语言实现--带头结点单链表操作
可能是顺序表研究的细致了一点,单链表操作一下子就实现了.这里先实现带头结点的单链表操作. 大概有以下知识点. 1;结点:结点就是单链表中研究的数据元素,结点中存储数据的部分称为数据域,存储直接后继地址 ...
最新文章
- 小程序 座位管理系统(一)(纯前端)
- Python调用MongoDB使用心得
- 七种垃圾收集器和垃圾回收、分代收集、GCROOTS相关概念、GC如何判断一个对象可以被回收
- c++ 不允许使用不完整的类型_Python入门高级教程--Python?变量类型
- 关于远程终端不能登录问题解决!
- windows linux cpu 抢占式 时间片_嵌入式Linux中进程调度怎样来解析
- 如何用softmax和sigmoid来做多类分类和多标签分类
- 电脑常用音频剪辑软件_常用的音频编辑软件
- java se ee me 区别_JDK与Java SE/EE/ME的区别
- python config文件_Python如何配置config文件?
- PHP和js做分页功能,php+js实现分页
- Maven安装与Maven HelloWorld入门实例
- SSMS证书已被颁发者吊销解决办法
- 怎样用python定位别人在哪_python程序员教你用微信给对方定位!你说回家!却还在外面鬼混?...
- 诸葛:大数据带来哪四种思维
- 中国汽车无线通信模块行业市场供需与战略研究报告
- 坚忍型性格分析,坚忍型人格的职业发展
- Python 文本终端 GUI 框架,太酷了
- 2018年全国各省市区编号大全(1)
- 映美Jolimark TP108W 打印机驱动
热门文章
- MIME文件类型格式--汇总
- Python3.2 --- Print函数用法
- 听说,京沪津的人都爱直接“看牌”买买买
- 我来做百科(第九天)
- JavaCore/HeapDump文件及其分析方法
- API聚合网关技术选型参考-网友实战-使用协程
- python基础知识和运用
- SAP 开发陷阱一箩筐(01)——创建了函数组却无法激活
- python 报错 cannot import name ‘byte_string‘ from ‘Crypto.Util.py3compat‘ 解决方法
- linux openssl libcurl库 交叉编译