乐享校园网站建设策划书,绵阳网站建设哪家好,wordpress缺少样式表,在网站上做宣传属于广告费用吗一、什么是makefile/make
会不会写makefile#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力 一个工程中的源文件不计数#xff0c;其按类型、功能、模块分别放在若干个目录中#xff0c;makefile定义了一系列的 规则来指定#xff0c;哪些文件需要先编译从一个侧面说明了一个人是否具备完成大型工程的能力 一个工程中的源文件不计数其按类型、功能、模块分别放在若干个目录中makefile定义了一系列的 规则来指定哪些文件需要先编译哪些文件需要后编译哪些文件需要重新编译甚至于进行更复杂 的功能操作 makefile带来的好处就是——“自动化编译”一旦写好只需要一个make命令整个工程完全自动编 译极大的提高了软件开发的效率。 make是一个命令工具是一个解释makefile中指令的命令工具一般来说大多数的IDE都有这个命 令比如Delphi的makeVisual C的nmakeLinux下GNU的make。可见makefile都成为了一 种在工程方面的编译方法。 make是一条命令makefile是一个文件两个搭配使用完成项目自动化构建。 而make则是指令makefile里保存的是依赖关系和依赖方法。
1.1makefile文件的编写 首先我们先touch一个makefile.c的文件以往我们需要在命令行进行gcc去手动编译形成可执行程序但通过makefile文件我们可以很好的释放自己的双手。 第一行表明依赖关系要形成的文件为mybin依赖文件为没有test.c。冒号的左边被称为目标文件右边为依赖文件列表
第二行则是要执行的指令即依赖方法使用gcc编译器形成mybin文件源文件为mytest.c。
这样我们直接调用make指令就可以形成名为mymakefile的可执行程序。 然后运行mymakefile就可以执行刚刚自己编写的makefile.c的程序了。 当我们再次make时因为已经生成了可执行程序而且我们对依赖文件并没有进行修改所以这里就会make失败。此时如果我们对依赖文件做出修改就可以重新编译成功。
1.2makeclean
那我们如何清理项目呢 我们可以通过设置自动化清理make clean来删除刚刚生成的可执行文件。 这时如果我们将 clean与mymakefile调换位置再次去make就默认去调用clean。
所以make和Makefile形成目标文件的时候默认时从上到下扫描makefile文件的默认形成的时第一个目标文件。
那make和makefile怎么知道可执行程序即依赖文件是不是最新的呢是通过对比时间对比出来的只要可执行程序最近的修改时间比所有源文件的最近修改时间新就说明它就是最新的。在逻辑上可执行和源文件的时间是不可能一样的。
1.3文件时间 stat查看文件详细信息可以看到时间。
文件内容属性如果对内容更新Modify的时间就会更新如果对文件的属性做更新Change的时间就会改变。 比如ll就可以查看文件详细属性信息如果我们用chmod对文件的权限进行修改再次查看文件的详细信息就可以看到chang显示的时间被更改。而我们对内容即Modify更改时change也会改变因为更改内容会对文件大小造成改变属性change也会跟着改变 Access是指上一次查看文件的时间而查看文件的次数比更改文件内容属性的次数要多得多如果每次查看都要更改Access 那如果短时间内多次查看文件就会导致操作系统反复向磁盘更改文件的Access信息导致系统本身变得低效。所以并不会每次都更新。
所以make指令在判断是否要重新生成目标文件时比较的是依赖文件和已经生成的目标文件的Modify时间当然我们也可以使用touch对依赖文件的Modify时间进行刷新刷新后再使用make去重新覆盖生成目标文件。
而在非常大型的项目中上百万行的代码编译器在编译的时候可能会耗费十几二十分钟如果我们对其中一个文件做修改再次编译编译器会根据时间判断修改了哪个然后将其重新编译然后和其他没有修改的已经编译好的文件进行融合链接大大提高了效率节省了时间。所以判断新旧时间是很有必要的。
二、make语法补充
2.1 .PHONY .PHONY用来修饰目标文件成为一个伪目标总是被执行。这样每次调用相关指令都会无脑进行重新编译不会再去检查新旧文件的相关时间属性。
2.2$ $^ 当出现文件名比较长或者较为复杂时我们可以使用 $ $^来让编译器根据上面的依赖关系进行推导$表示目标文件 $^表示依赖文件。 也可以通过自定义变量然后进行替换类似于宏的用法依然可以实现make功能。
2.3make和makefile的语法推导 最终要形成的目标文件为mymakefile我们可以根据程序的编译顺序预处理编译汇编链接四个步骤来反向将文件从.c开始进行推导形成最终的可执行程序需要.o文件形成.o需要.s形成,s需要.i,形成.i需要.c。所以从源文件到最终可执行是编译器这样一步步进行处理过来的这就是make语法的推导过程。 最后就对依赖关系进行推导然后逆向执行依赖方法最终形成目标文件mymakefile。
当然我们平日里不需要这样的写法来折磨自己。只需了解其原理就ok。