实验三 makefile文件的编写.docx
- 文档编号:2849688
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:12
- 大小:1.72MB
实验三 makefile文件的编写.docx
《实验三 makefile文件的编写.docx》由会员分享,可在线阅读,更多相关《实验三 makefile文件的编写.docx(12页珍藏版)》请在冰豆网上搜索。
实验三makefile文件的编写
实验三makefile文件的编写
一、实验目的
1、了解Makefile的基本概念和基本结构
2、初步掌握编写简单Makefile的方法
3、初步掌握利用GNUMake编译应用程序的方法
二、实验内容
采用两种方法编写简单程序的makefile文件,并使用make命令生成可执行文件。
三、实验指导与步骤
用make命令生成可执行文件,并执行该程序。
GNUmake工作时的执行步骤如下:
1、读入所有的Makefile。
2、读入被include的其它Makefile。
3、初始化文件中的变量。
4、推导隐晦规则,并分析所有规则。
5、为所有的目标文件创建依赖关系链。
6、根据依赖关系,决定哪些目标要重新生成。
7、执行生成命令。
Makefile的基本结构
Makefile的一般结构:
target……:
dependency……
command……
结构中各部分的含义:
(1)、target(目标):
一个目标文件,可以是Object文件,也可以是执行文件。
还可以是一个标签(Label)。
(2)、dependency(依赖):
要生成目标文件(target)所依赖哪些文件
(3)、command(命令):
创建项目时需要运行的shell命令(注:
命令(command)部分的每行的缩进必须要使用Tab而不能使用多个空格)。
Makefile实际上是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于dependency中的文件,其生成规则定义在命令command中。
如果依赖文件(dependency)中有一个以上的文件比目标(target)文件要新的话,shell命令(command)所定义的命令就会被执行。
这就是Makefile的规则。
也就是Makefile中最核心的内容。
四、实验报告要求
1.实验目的
2.实验内容
学习如何编写简单的makefile文件。
3.实验详细步骤
写出整个项目的源程序,两种方法实现的makefile文件,并记录在编写makefile文件时遇到的错误和修改方法。
4.实验技巧和心得体会
附录:
编写简单程序的makefile文件
编写头文件、源文件以及makefile文件,源文件主要有init.c、sort_a.c、find.c、find_bin.c、print.c以及main.c,分别实现数组的初始化,数组的排序,数组顺序查找,数组的二分法查找,数组的打印以及主函数部分功能的实现,头文件有locating.h和func.h,前者是包含库的头文件,后者是功能函数的声明。
注意,所有文件必须在同一目录下。
步骤:
1.在终端主目录下创建locating文件夹,并进入文件夹。
命令为:
mkdir~/locating
cdlocating
2.创建init.c、sort_a.c、find.c、find_bin.c、print.c、main.c、locating.h、func.h和makefile
命令为:
geditinit.csort_a.cfind.cfind_bin.cprint.cmain.csocating.hfunc.hmakefile
也可以单独创建,如果没有保存对应文件,文件将不存在(gcc改为touch,直接创建保存)。
3.编写代码
locating.h文件:
#ifndef_LOCATING_H_
#define_LOCATING_H_
#defineN10
#include
#include
#include
#include
#endif
func.h文件:
#ifndef_FUNC_H_
#define_FUNC_H_
/*-------------------数组初始化----------------*/
voidinit_array(inta[],intn);
/*-------------------数组排序-----------------*/
voidinsert_sort(inta[],intn);//插入排序
/*-------------------顺序查找-----------------*/
intfind_array_1(inta[],intlength,intvalue);
intfind_array_2(inta[],intlength,intvalue);
/*------------------二分法查找---------------*/
intfind_array_bin_1(inta[],intlength,intvalue);
intfind_array_bin_2(inta[],ints,inte,intvalue);
/*-------------------打印数组-----------------*/
voidprint_array(inta[],intn);
#endif
init.c文件:
/*----------------数组初始化----------------*/
#include"locating.h"
voidinit_array(inta[],intn)//a是数组名,n是元素个数
{
inti=0;
srand(time(0));//srand函数是随机数发生器的初始化函数
for(i=0;i a[i]=random()%N; } sort_a.c文件: /*---------------插入排序-------------------*/ #include"locating.h" voidinsert_sort(inta[],intn)//a是数组名,n是元素个数 { registerinttemp,i,j; for(i=0;i { temp=a[i+1]; for(j=i;j>=0;j--) { if(a[j]>temp) a[j+1]=a[j]; else break; } a[j+1]=temp; } } find.c文件: /*----------------------------顺序查找----------------------------*/ #include"locating.h" /*-----a是数组,length是数组长度,value查找的值-------*/ intfind_array_1(inta[],intlength,intvalue) { inti; for(i=0;i if(a[i]==value) returni; return-1; } /*------------递归法------------*/ intfind_array_2(inta[],intlength,intvalue) { if(0==length) return-1; if(a[length-1]==value) returnlength-1; find_array_2(a,length-1,value); } find_bin.c文件: /*----------------------------二分法查找------------------------------*/ #include"locating.h" /*-----a是数组,length是数组长度,value查找的值-------*/ intfind_array_bin_1(inta[],intlength,intvalue) { ints=0,e=length-1,m; while(s<=e) { m=(s+e)/2; if(a[m] s=m+1; if(a[m]>value) e=m-1; if(a[m]==value) returnm; } return-1; } /*-----------递归法----s是数组起始下标,e结束下标---*/ intfind_array_bin_2(inta[],ints,inte,intvalue) { staticintm; if(s>e) return-1; m=(s+e)/2; if(a[m] s=m+1; if(a[m]>value) e=m-1; if(a[m]==value) returnm; returnfind_array_bin_2(a,s,e,value); } print.c文件: /*---------------------------打印--------------------------------*/ #include"locating.h" voidprint_array(inta[],intn)//a是数组名,n是元素个数 { inti=0; for(i=0;i printf("a[%d]=%d\n",i,a[i]); } main.c文件: #include"locating.h" #include"func.h" /*--主函数可以自己写,这边重复数字,只要找到就输出其中一个,有能力请自己完善--*/ intmain(intargc,char*argv[]) { inta[N],i,k,n; init_array(a,N); insert_sort(a,N); print_array(a,N); for(i=0;i { k=random()%N; n=find_array_bin_2(a,0,N-1,k); if(n==-1) printf("无此节点! \n"); else printf("数值=%d,数组下标=%d\n",k,n); } return0; } 到了最主要的程序makefile的编写: (1)方法一(普通): socating: init.osort_a.ofind.ofind_bin.oprint.omain.o gccinit.osort_a.ofind.ofind_bin.oprint.omain.o-osocating init.o: init.clocating.h gcc-cinit.c sort_a.o: sort_a.clocating.h gcc-csort_a.c find.o: find.clocating.h gcc-cfind.c find_bin.o: find_bin.clocating.h gcc-cfind_bin.c print.o: print.clocating.h gcc-cprint.c main.o: main.clocating.hfunc.h gcc-cmain.c clean: rminit
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验三 makefile文件的编写 实验 makefile 文件 编写