操统实习第一周
一、makefile语法
Makefile语法参考资料
注意:在Makefile中添加的时候,clean的时候也要进行添加!
二、nachos的makefile结构
接下里以threads为例分析nachos的makefile的结构。
首先我们先看看makefile执行的过程:
首先:我们在编译nachos的时候,先cd code然后执行make,这个make就会寻找code下的makefile文件。
code下的makefile文件开始是伪目标all,因为其位置在最前面,所以其就会被当成默认的目标,那么之后就会执行all下的命令,其后的print,clean没有要求是不会被执行的。
然后,我们以threads为例,首先会进入threads目录,然后执行make,make的目标有两个,一个是depend,一个是nachos。depend的作用之后再说,nachos就是最后生成的可执行目标文件。进入threads目录之后,就会寻找该目录下的makefile文件并进行执行。
按照make的执行的过程,在thread下的makefile文件下include了其他的makefile文件,所以首先会读入两个Makefile文件的内容:
之后进行变量的初始化,变量的初始化涉及了三个Makefile文件,首先是threads下的Makefile文件,之后是code下的Makefile.common和Makefile.dep.。
threads下的Makefile:
makefile.common:其中与threads有关的是:
其中比较重要的是:以下三个变量,其涉及到目标生成的依赖文件:
定义在makefile.common中,分别是threads的h文件,c文件,o文件。
之后是目标的生成:目标有两个:
首先是depend:
作用:depend的作用主要是当我们向threads中添加源程序或者头文件的时候,执行make depend会自动修改threads下的makefile,便于我们进行修改。
第二个目标是nachos:
生成nachos的依赖是OFILES,而OFILES依赖于C_OFILES.
其中C_OFILES文件的生成:
这里应该是静态链接,首先目标是所有的.o文件,其依赖的文件是.c文件,$<的意思就是逐个生成。
以上就是makefile的结构,之后生成nachos目标,进入threads之后./nachos就可以执行。
如果要单独编译某一部分,那么就可以进入相应部分,先make depend,然后再make nachos。
辛苦营业,事情好多额!