make命令是linx中一个常用的编译命令,尤其是在开发C/C++程序时。make命令执行时,需要一个 Makefile 文件,通过Makefile文件中描述的源程序之间的依赖关系来自动进行编译。Makefile文件是按照规定的格式编写的,文件中需要说明如何编译各个源文件并如何链接生成可执行文件,并要求定义源文件之间的依赖关系。
在首次执行make时,会将所有相关的文件都进行编译,而在以后make时,通常是进行增量编译,即只对修改过的源代码进行编译。
即:
1)如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。
2)如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。
3)如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。
make命令会自动智能地根据当前的文件修改的情况来确定哪些文件需要重编译,从而编译所需要的文件和链接目标程序。
常用参数
格式:make
使用默认的makefile文件进行编译,按照GNUmakefile, makefile和Makefile的顺序进行查找。编译目标all,因此在一个makefile文件中必须要有all。【见下一个博客,最简单的makefile】
如果make后面不接任何参数,那么则是使用默认的makefile文件进行编译。同时,只对第一个目标进行编译。如果希望实现多个目标文件的话,可以使用一个特殊的目标all
all: a,b,c
格式:make -f makefile.debug
使用指定的makefile文件进行编译,此处就是makefile.debug。
格式:make install
编译目标install。install 是 该makefile 中的某个目标
格式:make clean
编译目标clean。clean 是该makefile 中的某个目标
格式:make veryclean
编译目标veryclean。veryclean是该makefile中的某个目标。一般,用于清除目标文件.o以及执行文件等,意思是干净的清除掉除makefile和源程序之外的文件。
格式:make rl
编译目标rl。rl是该makefile中的某个目标。一般,rl是relink的缩写,即重新链接,常用于某个依赖的库文件发生变化时强制重新链接生成执行文件。
make的工作方式
2、读入被include的其它Makefile。
3、初始化文件中的变量。
4、推导隐晦规则,并分析所有规则。
5、为所有的目标文件创建依赖关系链。
6、根据依赖关系,决定哪些目标要重新生成。
7、执行生成命令。
2、如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“edit”这个文件,并把这个文件作为最终的目标文件。
3、如果edit文件不存在,或是edit所依赖的后面的 .o 文件的文件修改时间要比edit这个文件新,那么,他就会执行后面所定义的命令来生成edit这个文件。
4、如果edit所依赖的.o文件也存在,那么make会在当前文件中找目标为.o文件的依赖性,如果找到则再根据那一个规则生成.o文件。(这有点像一个堆栈的过程)
5、当然,你的C文件和H文件是存在的啦,于是make会生成 .o 文件,然后再用 .o 文件生命make的终极任务,也就是执行文件edit了。