您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 实验五 makefile文件编写
1软件学院软件构造课程实验报告2014~2015学年第二学期2013级软件工程专业班级:2013189学号:201318923姓名:岳同书实验五makefile文件编写一、实验目的1、理解makefile规则基本结构2、掌握makefile规则编写方法3、掌握makefile变量定义方法二、实验环境与实验要求1.PC机一台,VC6.02、实验前做好上机实验的准备,针对实验内容,认真复习与本次实验有关的知识,完成实验内容的预习准备工作;3、能认真独立完成实训内容;4、实验后做好实验总结,根据实验情况完成总结报告。三、实验内容假设我们有一个程序由5个文件组成,源代码如下:/*main.c*/#includemytool1.h#includemytool2.hintmain(){mytool1_print(hellomytool1!);mytool2_print(hellomytool2!);return0;}/*mytool1.c*/#includemytool1.h#includestdio.hvoidmytool1_print(char*print_str){printf(Thisismytool1print:%s,print_str);}/*mytool1.h*/#ifndef_MYTOOL_1_H#define_MYTOOL_1_Hvoidmytool1_print(char*print_str);#endif2/*mytool2.c*/#includemytool2.h#includestdio.hvoidmytool2_print(char*print_str){printf(Thisismytool2print:%s,print_str);}/*mytool2.h*/#ifndef_MYTOOL_2_H#define_MYTOOL_2_Hvoidmytool2_print(char*print_str);#endif内容1:基本makefile文件编写方法首先了解一下make和Makefile。GNUmake是一个工程管理器,它可以管理较多的文件。使用make的最大好处就是实现了“自动化编译”。如果有一个上百个文件的代码构成的项目,其中一个或者几个文件进行了修改,make就能够自动识别更新了的文件代码,不需要输入冗长的命令行就可以完成最后的编译工作。make执行时,自动寻找Makefile(makefile)文件,然后执行编译工作。所以我们需要编写Makefile文件,这样可以提高实际项目的工作效率。在一个Makefile中通常包含下面内容:1、需要由make工具创建的目标体(target),通常是目标文件或可执行文件。2、要创建的目标体所依赖的文件(dependency_file)。3、创建每个目标体时需要运行的命令(command)。格式如下:target:dependency_filesTABcommandtarget:规则的目标。通常是程序中间或者最后需要生成的文件名,可以是.o文件、也可以是最后的可执行程序的文件名。另外,目标也可以是一个make执行的动作的名称,如目标“clean”,这样的目标称为“伪目标”。dependency_files:规则的依赖。生成规则目标所需要的文件名列表。通常一个目标依赖于一个或者多个文件。command:规则的命令行。是make程序所有执行的动作(任意的shell命令或者可在shell下执行的程序)。一个规则可以有多个命令行,每一条命令占一行。注意:每一个命令行必须以[Tab]字符开始,[Tab]字符告诉make此行是一个命令行。make按照命令完成相应的动作。这也是书写Makefile中容易产生,而且比较隐蔽的错误。命令就是在任何一个目标的依赖文件发生变化后重建目标的动作描述。一个目标可以没有依赖而只有动作(指定的命令)。比如Makefile中的目标“clean”,此目标没有依赖,只有命令。它所指定的命令用来删除make过程产生的中间文件(清理工作)。在Makefile中“规则”就是描述在什么情况下、如何重建规则的目标文件,通常规则中包括了目标的依赖关系(目标的依赖文件)和重建目标的命令。make执行重建目标的命令,来创建或者重建规则的目标(此目标文件也可以是触发这个规则的上一个规则中的依赖文件)。规则包含了目标和依赖的关系以及更新目标所要求的命令。Makefile中可以包含除规则以外的部分。一个最简单的Makefile可能只包含规则描述。规则在有些Makefile中可能看起来非常复杂,但是无论规则的书写是多么的复杂,它都符合规则的基本格式。常规法写第一个Makefile.内容二:利用变量控制改进makefile文件这只是最为初级的Makefile,现在来对这个Makefile进行改进。3改进一:使用变量一般在书写Makefile时,各部分变量引用的格式如下:1.make变量(Makefile中定义的或者是make的环境变量)的引用使用“$(VAR)”格式,无论“VAR”是单字符变量名还是多字符变量名。2.出现在规则命令行中shell变量(一般为执行命令过程中的临时变量,它不属于Makefile变量,而是一个shell变量)引用使用shell的“$tmp”格式。3.对出现在命令行中的make变量同样使用“$(CMDVAR)”格式来引用。改进二:使用自动推导让make自动推导,只要make看到一个.o文件,它就会自动的把对应的.c文件加到依赖文件中,并且gcc-c.c也会被推导出来,所以Makefile就简化了。四、实验过程内容一内容二改进一:4改进二:五、分析与思考1.c语言的编译工具有哪些?这些工具都具有什么特点?由于C++兼容C,所以使用C++编译器,常用的有visualstudio里的VC++编译器,DEVC++编译器,C++bulider编译器,建议使用前2个,VC++功能强大,可以编译所有的windows程序,但是过于复杂,模块多,体积大,不宜学,但是学好了前途(钱途)无量,DEVC++是个标准的C++编译器,只有C++的基本功能,只能编写win32程序,win32控制台程序,DLL动态链接库,没有VC++提供的强大的类库支持。2.静态程序库和动态程序库与可执行程序进行链接时有什么不同?静态程序库只是多个目标文件的归档文件,可以在需要时链接到可执行程序,对于动态程序库的情况,链接过程要更为复杂,特别是你必须允许链接过程发生在运行时,而不是程序编译时,这就要求改变编译顺序。六、实验总结
本文标题:实验五 makefile文件编写
链接地址:https://www.777doc.com/doc-2458926 .html