基于让命令与makefile文件详解

  

  

在编写c/c++测试程序时,我们习惯每次修改一处代码,然后就马上编译运行来查看运行的结果。这种编译方式对于小程序来说是没有多大问题的,可对于大型程序来说,由于包含了大量的源文件,如果每次改动一个地方都需要编译所有的源文件,这个简单的直接编译所有源文件方式对程序员来说简直是噩耗。

  

<强>我们看一个例子:

     //c   # include“a.h”//2.摄氏度   # include“a.h”   # include“b.h”//3.摄氏度   # include“b.h”   # include“刘昀”      

如果程序员只修改了头文件刘昀,则源文件c和2.摄氏度都无需编译,因为它们不依赖这个头文件。而对3.摄氏度来说,由于它包含了刘昀,所以在头文件刘昀改动后,就必须得新编译。

  

而如果改动了b.h可是忘记编译了2.摄氏度,那么最终的程序就可能无法正常工作。

  

让工具就是为了解决上述问题而出现的,它会在必要时重新编译所有受改动影响的源文件。

  

  

让命令本身支持许多选项,最常用的是- f选项。如果我们直接运行

        使      

那么让命令会首先在当前目录查找名为makefile的文件,如果找不到,就会查找名为makefile的文件。

  

为了指示让命令将哪个文件作为makefile文件,可以使用- f选项:

        让- f Makefile1      

  

  

让命令功能虽然十分强大,但是光凭其自身无法了解如何构建应用程序的。这时,makefile就出来了,它告诉让应用程序如何构建的使命令和makefile文件的结合提供了一个在管理项目的十分强大的工具,它们不仅用于控制源文件的编译,而且还提供了将应用程序安装到目标目录等其他功能。

  

<强> 3.1依赖关系

  

依赖关系定义了应用程序里面每个文件与其他源文件之间的关系,例如在上面的例子中,我们可以定义最终应用程序依赖于目标文件main.o, 2.和3. o。同样,main.o依赖于c和a.h, 2. o依赖于2.摄氏度,a.h和b.h, 3. o依赖于3.摄氏度,b.h和刘昀

  

在makefile文件中,依赖关系的写法是:先写目标的名称,然后紧跟一个冒号,接着是空格或者制表符选项卡,最后是用空格或者制表符标签隔开的文件列表。上面的例子的依赖关系如下:

        myapp:主要。o 2。3. o   主要。o:主要。c a.h   2.o: 2。c。h b.h   3.o: 3。c b。h刘昀      

这组依赖关系形成一个层次结构,展示了源文件之间的关系,例如,如果源文件b.h发生改变,就需要重新编译2.和3. o,接下来还需要重新编译myapp .

  

<强> 3.2规则

  

makefiel文件中的规则定义了目标的创建方式。在上面的例子中,我们使用gcc - c 2.摄氏度创建2. o。这个gcc命令即是目标2. o的创建方式,也即是规则。

  

在makefile文件中,规则都必须以选项卡开头。

  

在源文件所在的目录下创建Makefile1文件,其内容如下。

        myapp:主要。o 2。3. o   gcc - o myapp主要。o 2。3. o   主要。o:主要。c a.h   gcc - c c   2.o: 2。c。h b.h   gcc - c 2.摄氏度   3.o: 3。c b。h刘昀   gcc 3. c - c      

三个头文件a.h, b.h,刘昀内容都为空,源文件的内容如下:

     /*主。c */# include & lt; stdlib.h>   # include“a.h”   外面的空白function_two ();   外面的空白function_three ();   int main ()   {   function_two ();   function_three ();   退出(EXIT_SUCCESS);   }         /* 2。c */# include & lt; stdio.h>   # include“a.h”   # include“b.h”   空白function_two () {   printf("函数二\ n ");   }         /* 3。c */# include & lt; stdio.h>   # include“b.h”   # include“刘昀”   空白function_three () {   printf(“函数三\ n”);   }      

执行让命令:

        让美元- f Makefile1   gcc - c c   gcc - c 2.摄氏度   gcc - c 3.摄氏度   gcc - o myapp主要。o 2。3. o      

运行应用程序:

        美元。/myapp   两个函数   函数三      

从输出可以说明应用程序已被正确构建。

基于让命令与makefile文件详解