Makefile学习(一)[第二版]
简介
1)make:利用 make 工具可以自动完成编译工作。这些工作包括:如果仅修改了某几个源文件,则只重新编译这几个源文件[make通过比对相应的.c文件与.o文件的时间];如果某个头文件被修改了,则重新编译所有包含该头文件的源文件。利用这种自动编译可大大简化开发工作,避免不必要的重新编译。
2)Mackfile:make工具通过一个称为 Mackfile 的文件来完成并自动维护编译工作。Mackfile文件描述了整个工程的编译、连接等规则。
Mackfile基本规则
Target ...: Dependencies ...
Command ...
说明:
1)目标(TARGET):即最终想要产生的文件,如:可执行文件,目标文件或中间文件等;目标也可以是要执行的动作,如clean,也称为伪目标。
2)依赖(DEPENDENCIES):为了产生目标文件而依赖的文件列表,一个目标通常依赖于多个文件。
3)命令(COMMAND):是make执行的动作(shell命令或是可在shell下执行的程序,如echo)。注意:每个命令行的起始字符必须为TAB字符!
如果DEPENDENCIES中有一个或多个文件更新的话,COMMAND就要执行,这就是Makefile最核心的内容.
简单的Mackfile示例
#1 最简单
hello:
gcc -o hello hello.c
#2 稍微复杂
hello:hello.o
gcc -o hello hello.o
hello.o:
gcc -o hello.o -c hello.c
#3 进一步完善
hello:hello.o
gcc -o hello hello.o
hello.o:
gcc -o hello.o -c hello.c
clean:
rm -rf hello.o #delete file hello.o
#4 在Mackfile中执行shell命令[@符号:不输出命令本身]
hello:hello.o
gcc -o hello hello.o
@echo "--------------ok------------"
hello.o:
gcc -o hello.o -c hello.c
clean:
rm -rf hello.o #delete file hello.o
#5 综合[.PHONY:#显示声明伪目标]
.PHONY: clean
main: main.o sub.o add.o
gcc -Wall -g -o main main.o sub.o add.o
main.o: main.c
gcc -Wall -g -o main.o -c main.c
add.o: add.c add.h
gcc -Wall -g -o add.o -c add.c
sub.o: sub.c sub.h
gcc -Wall -g -o sub.o -c sub.c
clean:
rm -f main.o sub.o add.o
执行:
1)make #生成第一个目标
2)make clean #“生成”clean伪目标
3)make main.o #仅生成main.o目标
4)make -f Mackfile #显示指定执行的文件名
Makefile变量
为了简化和维护Mackfile,可以在Mackfile中使用变量,格式
varname=some_text
引用变量的值:$(varname)
按照惯例,在Mackfile中,变量一般大写
Makefile自动化变量 |
|
选项名 |
作用 |
$@ |
规则的目标文件名 |
$< |
规则的第一个依赖文件名 |
$^ |
规则的所有依赖文列表 |
$* |
不包括后缀名的当前依赖文件名 |
$? |
当前目标所依赖的文件列表中比当前目标文件还要新的文件 |
#综合示例
.PHONY: clean
.SUFFIXES: .c .o
.c.o:
gcc -Wall -g -o $@ -c $^
OBJECTS = main.o sub.o add.o
SOURCES = $(OBJECTS:.o=.c)
main: $(OBJECTS)
gcc -Wall -g -o $@ $^
clean:
@echo "delete execute file and object file..."
rm -f $(OBJECTS) main
附-
.SUFFIXES:.c .o #表示任何x.c文件与x.o文件关联
Make使用隐含推导规则/生成多个可执行文件
#示例-生成多个可执行文件1
.PHONY: clean all
BIN = 01test 02test
all: $(BIN)
clean:
-rm -f $(BIN)
#示例-生成多个可执行文件2-使用自己定制的规则,生成.o中间文件
.PHONY: clean all
BIN = 01test 02test
OBJECTS = $(BIN:=.o)
all: $(BIN)
01test.o: 01test.c
02test.o: 02test.c
clean:
-rm -f $(BIN) $(OBJECTS)
#示例-生成多个可执行文件3-使用更加细致的规则
.PHONY: clean all
CFLAGS = -g -Wall
CC = gcc
BIN = 01test 02test
OBJECTS = $(BIN:=.o)
.SUFFIXES: .c .o
.c.o:
$(CC) $(CFLAGS) -c $< -o $@
all: $(BIN)
01test.o: 01test.c
02test.o: 02test.c
clean:
-rm -f $(BIN) $(OBJECTS)
模式规则与后缀规则
%.o:%.c
.c.o:
#示例
.PHONY: clean all
CC = gcc
CFLAGS = -Wall -g
BIN = 01test 02test
SOURCES = $(BIN:=.c)
OBJECTS = $(BIN:=.o)
all: $(BIN)
01test: 01test.o
02test: 02test.o
#%.o: %.c #模式规则
# $(CC) $(CFLAGS) -c $< -o $@
.c.o: #后缀规则,与前作用相同
$(CC) $(CFLAGS) -c $< -o $@
clean:
-rm -rf $(BIN) $(OBJECTS)
Makefile学习(一)[第二版]相关推荐
- Makefile学习(二)[第二版]
复杂实例 #示例1:在上一个示例的基础上再增加一个可执行文件03test[修改之处已标红] .PHONY: clean all CC = gcc CFLAGS = -Wall -g BIN = 01t ...
- Makefile学习(三)[第二版]
make常用内嵌函数 1.函数调用 $(function arguments) #$引用的结果就是函数生成的结果 2.Makefile下常用的函数 1)$(wildcard PATTERN) #匹配当 ...
- TensorFlow 深度学习中文第二版·翻译完成
原文:Deep Learning with TensorFlow Second Edition 协议:CC BY-NC-SA 4.0 不要担心自己的形象,只关心如何实现目标.--<原则>, ...
- TensorFlow 深度学习中文第二版(初稿)
TensorFlow 深度学习中文第二版 第 1 章深度学习入门 人工神经网络 ANN 如何学习? 神经网络架构 深度学习框架 总结 第 2 章 TensorFlow 的首次观察 TensorFlow ...
- 李沐d2l《动手学深度学习》第二版——风格迁移源码详解
本文是对李沐Dive to DL<动手学深度学习>第二版13.12节风格迁移的源码详解,整体由Jupyter+VSCode完成,几乎所有重要代码均给出了注释,一看就懂.需要的同学可以在文末 ...
- 李沐《动手学深度学习》第二版比赛2-Classify Leaves
李沐<动手学深度学习>第二版比赛2-Classify Leaves 我的偶像,李沐大神主讲的<动手学深度学习>(使用Pytorch框架,第一版使用的是MXNet框架)目前已经进 ...
- 李沐《动手学深度学习》第二版 pytorch笔记1 环境搭建
李沐<动手学深度学习>第二版pytorch笔记1 搭建环境 文章目录 李沐<动手学深度学习>第二版pytorch笔记1 搭建环境 此时尚有耐心 虚拟环境搭建 创建虚拟环境 查看 ...
- 《精通labview教程——由浅入深的范例学习(第二版)》课后题答案
<精通labview教程--由浅入深的范例学习(第二版)>课后题答案,[美]John Essick著,[译]邓科等 课后题答案偶数部分是教程自带答案,奇数题目是自制答案 下载链接: 第一章 ...
- 强化学习圣经第二版阅读记录
最近开始认真阅读强化学习圣经第二版,本文先记录一下用到的资料: 圣经原版:http://incompleteideas.net/book/the-book-2nd.html 圣经中文翻译版:http: ...
最新文章
- 佐治亚理工学院计算科学与工程系博士生招生!
- SAP QM 执行事务代码QA11 报错- Selected set code does not exist, or data entered is incomplete-
- IOS开发 使用CGContextRef绘制文字时的设置
- 对话Nullmax无人车CEO徐雷:造血营收L3,追梦宏图L4
- 【MaxCompute】学习笔记基础说明
- Spring事务处理时自我调用的解决方案及一些实现方式的风险
- CSS之使用display:inline-block布局
- 电脑硬件检测_好用的电脑硬件型号有哪些_江西南昌顺同谦科技|电脑||笔记本|...
- 今天整理了短距离传输技术的比较!有用得到的,请拿走不谢!
- infoseccrypto_java下载_關於php接ICBC的支付接口的解決方案
- mysql 数据库引擎介绍_MYSQL 数据库引擎介绍
- 海南大学计算机原理,海南大学微机原理课件 第一章 计算机基础知识
- how to make milt-Lang windows installer All in 1
- net4.0的从客户端中检测到有潜伏危险的 Request.Form
- YOLOv5的详细使用教程,以及使用yolov5训练自己的数据集
- 易语言精益模块json_精易模块|精易模块下载 v3.46 官方免费版_最火软件站
- C51单片机实验——矩阵按键
- Photoshop 2022下缩放和平移图像
- JS时间增加2个小时
- 手把手和你用原生JS写一个循环播放图片轮播