商城网站建设设计介绍,wordpress过滤显示插件,建站模板免费下载,汽车行业做网站make是一个命令工具#xff0c;用于读取并执行名为Makefile#xff08;makefile#xff09;的文件中定义的规则。 
Makefile是一个文本文件#xff0c;它告诉make哪些文件依赖于其他文件#xff0c;以及如何从这些依赖项生成最终的目标文件。 
我们先简单看一下使用make的…make是一个命令工具用于读取并执行名为Makefilemakefile的文件中定义的规则。 
Makefile是一个文本文件它告诉make哪些文件依赖于其他文件以及如何从这些依赖项生成最终的目标文件。 
我们先简单看一下使用make的示例 
首先我们先创建一个源文件然后在里面简单写一下代码。 然后我们创建Makefile文件并在文件中写入 当我们输入make时就会执行Makefile中的相应命令 接下来详细讲解Makefile中写入的各个部分。 
上面示例中的test是目标文件冒号后边是依赖文件列表依赖文件可以有多个在上面示例中只有test.c一个也就是说test文件是依赖test.c文件生成的。 
第二行gcc -o test test.c命令是使用gcc编译test.c文件第二行其实就是依赖方法我们要生成test目标文件既需要依赖关系也需要依赖方法第二行便是依赖方法需要注意的是前边要按table键。同样的也可以有多个依赖方法在上面示例中只有一个。 
接下来的三行又是一组首先.PHONY是用来声明一个伪目标的后边的clean便是伪目标的名称。下一行的clean同样也是依赖关系只是比较特殊依赖文件列表为空rm -f test则是依赖方法。 
在上面的示例中我们可以看到当我们输入make后就自己显示相应的依赖方法了make后边是可以跟相应的目标文件的最后就会执行依赖方法中的指令当我们要重复多次输入某一指令时就可以用make来方便自己。当make后边不加目标文件时默认就是第一个目标文件如上面示例中make后执行的是gcc指令。 
关于.PHONY的具体作用我们先演示效果再讲解 
上面示例时 当加上.PHONY:test并删除.PHONY:clean时 可以看到对于test来说没加上.PHONY时make是不能被多次执行的而加上后是可以被多次执行的.PHONY的作用就是让目标文件对应的方法总是被执行但是clean为什么在两次执行过程中都可以多次被执行呢这个跟时间有关系没加.PHONY时多次使用make会提示已经是最新的了所以它不会再次编译而rm指令由于与时间无关所以每次都可以被执行。 
我们再来看一个演示 
当前还是不能执行多次make然后我们再进入到test.c中并对其内容进行修改再次执行make时发现可以了。 为什么有时候需要重新编译但是有时候又不需要呢 
答案是根据对比文件的Mtime来确定的。 
通过stat指令可以查看Mtime 可以看到有三个时间即Access、Modify和ChangeAccess 是文件被访问的时间Modify是文件内容最近被修改的时间Change是文件属性最近被修改的时间。在上面例子中我们在test.c文件中加了一条语句所以修改了其Mtime每一次编译生成可执行文件后也会有一个Mtime这个时间是比源文件的时间晚的但是当我们修改文件后其时间比原来生成的可执行文件的时间晚所以就又可以重新编译了即通过比较Mtime来确定是否要重新编译。 
我们再来看下一个示例 在这个示例中test依赖于test.o而test.o又依赖于test.s而test.s依赖于test.itest.i依赖于test.ctest.c是存在的所以找到后执行依赖方法然后逐步递归构建test也就是说make解释Makefile时是会自动推导的一直推导推导过程不执行依赖方法直到推导到有依赖文件存在然后再逆向执行所有的依赖方法。 
其他 在Makefile中%是通配符,%.o:%.c则是表示任何.c文件都可以生成对应的.o文件即将当前目录下的所有.c文件都展开在依赖列表中。$则是表示将依赖文件一个一个交给gcc -c选项形成同名的.o文件。 
下一个示例 Makefile中也可以定义变量上面的bin和src便是变量$bin就是test$src就是test.o$^表示所有的依赖文件列表这里指的就是test.o$代表目标文件也就是test。 
其实Makefile就是指令执行make后会执行Makefile中写入的相应指令如果我们不想让这些指令回显可以在前面加上 另外注释是用#。