守其初心,始终不变。——苏轼
make/Makefile
- 1、背景介绍
- 2、简单认识
- 3、简单原理
1、背景介绍
难道说每次C语言代码写好之后都需要去编写gcc命令,如果有上百个文件去构建的话,那不得麻烦死了。所以有没有简单的做法呢?有!答案就是make/Makefile。
2、简单认识
代码语言:javascript复制touch makefile:先简单创建一个文件
vim makefile:进行makefile文件的编写
make:对文件的构建
make clean:对文件的清理(在makefile中写了clean才有用)
3、简单原理
make是一个命令,makefile是一个文件 当我配置好makefile的时候就能够直接运行,进行构建。
配置的内容也不多,都是简单内容,简单的创建一个可运行文件以及能够快速删除一些多余冗杂的内容
第一行称为依赖关系,下一行称为依赖方法。 第一行冒号后的称为依赖文件列表,按照空格为分割。 第一左边叫做目标文件。 第二行的依赖方法中,必须要tab,4个空格开头。 当我们运行make的时候,就会在当前目录之下找makefile,然后根据makefile中的依赖关系,形成目标文件,怎么形成目标文件?就是依赖写的依赖方法来实现目标文件的实现。 怎么理解依赖关系和依赖方法? 例子说明:当你上学的时候,有可能会有过这样的经历。你快到月底没钱吃饭了,此时由于你没钱了,你就打电话给“那位大人”,街上电话你直接说:”爸,我是你儿子“,说完直接一挂。刚刚说的那句话表明的就是我是你儿子,我在上学,我在依赖于你,上学这件事依赖于你,正是因为是爸爸,所以应该给钱,这就是依赖关系。可是站在你爸的视角的话,你直接和他说我是你儿子电话就挂了,你爸会怎么想?你爸也不知道要干嘛啊!所以只表明依赖关系是不够的,你还要告诉你爸你还要干什么。所以,你想了一会发现不对劲,又打回去给你爸,说我没钱吃饭了。这样表明了依赖方法才能够最终实现你的目标文件。 完成一件事情要有两种前提:有依赖关系,能够产生依赖方法 所以还有一个要点,这么解释完之后应该能够理解,并不是make独有的完成事件的方法是有依赖关系和依赖方法,所有的事情都要有这两个条件。 clean中就是没有依赖关系的,能够直接依靠依赖方法来实现所需要的操作。 为什么make直接就是能够生产可执行文件呢?对于make clean为什么又是需要加上clean的呢?
代码语言:javascript复制make mytest
make
这两个语句在我写的makefile中表现的结果是一样的。那这又表明什么呢? 其实就是表明makefile在make的指令下,是从上到下扫描makefile,默认形成第一个目标文件。 所以一般在写的时候会把形成可执行程序会放在第一位。能够直接形成可执行程序,方便操作。 当我们执行make的时候执行一次之后在执行make的话,就会出现这样的话。
如果我们不想让他只执行一次之后再执行就不让执行了,那我们该怎么办呢?
通过改变makefile中的.PHONY来帮助我们。
所以其中的“.PHONY:XXX”的作用是什么呢? 表示的意思是XXX对应的方法总是要执行的。
为什么makefile对最新的可执行程序,默认是不想重新形成呢?如何做到的呢? 目的是提高编译效率。
代码语言:javascript复制stat test.c
stat mytest
其中的Modify的时间就是判断是否需要重新生成可执行程序的重要依据,如果时间比可执行程序晚的话,就需要重新生成,如果比可执行程序时间早的话make就会没有效果。