当前位置:网站首页>GUN make (1) 简介
GUN make (1) 简介
2022-06-25 23:57:00 【Chen_Hulk】
1. GNU make 介绍
make通过比较对应的文件的最后修改时间,来决定哪些文件需要更新,哪些文件不需要更新。
当使用make工具进行编译时,工程中以下几种文件在执行make时会被编译:
- 所有的源文件没有被编译过,则对各个C源文件进行编译链接,生成可执行文件。
- 每一个在上次执行make之后修改过的C源文件在本次执行make时将会被重新编译。
- 头文件在上一次执行make之后被修改,则所有包含此头文件的C源文件在本次执行make时将会被重新编译。
2. makefile 规则介绍
TARGET...:PREREQUISITES
COMMAND
....
或者
TARGET...:PREREQUISITES;COMMAND
COMMAND
....
目标:依赖
[tab]命令TARGET: 规则的目标,是最后需要生成的文件名或者为了实现这个目的中间过程文件名。
也可以是一个make执行的动作的名称,比如目标clean.
PREREQUISITES: 规则的依赖,生成规则目标所需要的文件名列表。(依赖并不是必须的,比如clean)
COMMAND:
- 规则的命令行单独行出现时,每一个命令行必须以[tab]字符开始。
- 当命令与目标依赖同行出现时,需要用“;”分隔。
3. make 如果工作
默认情况下,make执行的是makefile中的第一个规则,该规则的第一个目标成为 最终目的/终极目标。
如果makefile的第一个规则有多个目标,那么默认的终极目标是多个目标中的第一个。
举例:
edit:main.o kbd.o
cc -o edit main.o kdb.o
main.o:main.c defs.h
cc -c main.c
kdb.o:kdb.c command.h
cc -c kdb.c
- make 首先解析终极目标所在的规则,根据其依赖文件,依次从左到右寻找创建这些依赖文件的规则。
- 在完成对所有依赖文件的重建之后,最后一步才是重建此规则的目标。
- 如果任何一个规则执行出现错误,则make立即报错并退出。(make 并不会对规则的依赖关系是否正确,描述重建目标的规则命令行是否正确做错误检查。)
终极目标的所有依赖文件 main.o kbd.o 更新规则:
- 目标.o文件不存在,使用其描述规则创建它。
- 目标.o文件存在, 目标.o文件所依赖的.c源文件, .h文件中的任何一个比目标文件.o更新,则更规则重新生成它。
- 目标.o文件存在,目标.o文件比它的任何一个依赖文件更新(.c / .h),则什么也不做。
- defs.h出现在依赖中,但是没有出现在命令中,因为假设 main.c中已经include了defs.h文件。
终极目标 edit 更新规则:
- 终极目标文件不存在,则执行规则以创建目标。
- 终极目标文件存在,其依赖文件中有一个或者多个文件比它更新,则根据规则重新链接生成终极目标。
- 终极目标文件存在,它比它的任何一个依赖文件都更新,则什么也不做。
4.指定变量
edit:main.o kbd.o
cc -o edit main.o kdb.o上述规则中,main.o kbd.o 分别在依赖和规则中出现了两次,当需要添加或者删除时,需要在两个地方添加,后期维护不变。
为了避免这个问题,使用一个变量 objects/OBJECTS/objs/OBJS/obj/OBJ来作为所有的.o文件列表: objects = main.o kbd.o
objects = main.o kbd.o
edit:$(objects)
cc -o edit:$(objects)
5.自动推导规则
在使用make编译.c源文件时,编译.c源文件规则的命令可以不用明确给出,因为make本身存在一个默认的规则,能够自动完成对.c文件的编译并生成对应的.o文件,执行命令 “cc -c”来编译.c源文件。
在makefile中我们只需要给出需要重建的目标文件名(.o文件),make自动为这个.o文件寻找合适的依赖文件(后缀为.c,文件名相同的文件。)
这样,我们就可以省略掉描述.c文件和.o依赖关系的规则。
举例:
main.o : main.c defs.h
cc -c main.c
make自动为main.o文件寻址合适的依赖文件main.c,并使用,默认规则cc -c main.c -o main.o
以上可简化成:
main.o:defs.h
边栏推荐
猜你喜欢
随机推荐
Flex & bison start
JQ 自定义属性取值
What is the process of opening a mobile card account? Is it safe to open an account online?
Is it safe to open a securities account online
经纬度 多点 获取中心点 已解决
--都市修炼手册之SQL-- 第一章 基础复习
shell正则表达式
Postman断言对应脚本的解释
Oracle database complete uninstallation steps (no screenshot)
Oracle數據庫完全卸載步驟(暫無截圖)
Operation of simulated examination platform for electrical test questions in 2022
JSON实例(一)
Idempotence of interfaces -- talk about idempotence of interfaces in detail, that is, solutions
Shengxin weekly issue 33
Longitude and latitude multipoint acquisition center point has been solved
Abnova丨抗GBA单克隆抗体解决方案
代码覆盖率测试(一)
木瓜蛋白酶的特点及相关特异性介绍
【花雕体验】11 上手ESP32C3
Summary of knowledge points of catboost







![[flower carving experience] 11 start esp32c3](/img/ff/d7c266893ef4ef70c6536085927e0e.jpg)

