工程管理工具
- 目的:解决大型项目中模块之间的以来问题
注:一般生成文件指令都是:gcc teat.c -g -o test 由test.c生成可执行文件test
makefile:这是四十多年前的工具,当前在实际工作中几乎都不会手写makefile文件,但是必须要学它,当前的现代C/C++工程管理工具本质都是通过自动化的方式生成,其原理也都归结于makefile。
步骤:
一、首先是vim Makefile 注:这个文件名是固定的,M/m都一样
二、cd进入Makefile
makefile的组成:
[target]:[dependent] [目标]:[依赖]
[command] [命令]目标:就是要生成的内容 (test)
依赖:由什么文件生成 (test.c)
命令:生成命令 (gcc teat.c -g -o test)
这就是最简单的Makefile文件!!
三、编辑完成后,保存退出,命令行输入make。
make:make的作用是查看当前是否有makefile这个文件,如果有就会自动解析,并检查依赖。
如果依赖改变了,就要make生成。主要是判断时间是否改变(最后一次修改时间)。命令ll(两个LL就是ls -l)看到的时间就是最后一次修改时间。
注:vim是增量编译(哪一部分代码改了,编译那一部分代码),还有一种全量编译(全量编译就是只要代码改了就编译全部代码),大大提高了效率。现在c++标准最新的是c++17(17年的标准),下次是c++20(20年的标准)它会引入模块,期待吧~~~
有时候Makefile中可以添加清除,不需要由依赖
例如:clean:
rm test
一个Makefile可以生成多个目标,有的目标并不是为了要生成个东西,仅仅是为了一些特定的动作,最典型的就是clean(清空之前生成的目标)。
注:像clean这样只是为了执行一个动作,而不是要生成一个文件,但是如果此时目录中由clean这个文件,就会影响动作执行,此时就可以使用 .PHONY 把clean变成伪目标。
可以在make命令后面带上参数(参数就是要生成的目标)。换言之,makefile中有多个目标,直接敲make默认生成第一个目标。
make命令的执行过程:
- 先在当前目录中查找Makefile/makefile文件
- 找到生成目标(决定是否要真的生成,会检查生成的文件是不是最新的)
- 检查依赖文件是否存在
- 执行生成动作的命令
常见的现代类似写Makefile一样的工具:
CMake:开源世界中广泛使用的构建工具。
Blaze(火焰刀):比较重量级的工具(谷歌开发的)。
//Makefile
.PHONY:all
all : reader writer //一个make生成所有的
reader:reader.c
gcc $^ -o $@
writer : writer.c
gcc $^ -o $@
.PHONY:clean
clean:
rm reader writer