实验三 Make工程管理器

2019-07-13 05:28发布

实验三 Make工程管理器

【实验目的】 1、了解嵌入式Linux编程环境; 2、掌握Make工程管理方法; 3、掌握Makefile文件编写和使用方法。 【实验内容】 1、将一个大文件拆分成多个小文件; 2、编写Makefile文件完成多文件编译。 【实验任务】 1、编写计算器程序(calc)源程序,共9个文件,文件关系如下表所示: 文件名 包含文件 文件功能说明 main.c #include “add.h” #include “sub.h” #include “mux.h” #include “div.h” 完成运算数据的获取和运算结果的输出 add.c 完成加法功能函数(add)的编辑 add.h 预编译完成加法功能函数(add)的声明 sub.c 完成减法功能函数(sub)的编辑 sub.h 预编译完成减法功能函数(sub)的声明 mux.c 完成乘法功能函数(mux)的编辑 mux.h 预编译完成乘法功能函数(mux)的声明 div.c 完成除法功能函数(div)的编辑 div.h 预编译完成除法功能函数(div)的声明 2、编写Makefile完成计算器程序(calc)的编译,并通过假想目标(clean)清除目标文件。 第一步:不使用任何变量完成功能; 第二步:使用自定义变量让程序更加通用; 第三步:使用预定义变量让程序更加通用。 完成每一步的Makefile文件编写,并完成调试。 main.c #include #include "add.h" #include "sub.h" #include "mux.h" #include "div.h" int main(void) { float a,b; scanf("%f", &a); scanf("%f", &b); add(a,b); sub(a,b); div(a,b); mux(a,b); } add.h extern void add(float a,float b); add.c #include void add(float a,float b) { printf("%f+%f=%f ",a,b,(a+b)); } sub.h extern void sub(float a,float b); sub.c sub.c #include void sub(float a,float b) { printf("%f-%f=%f ",a,b,(a-b)); } div.h extern void div(float a,float b); div.c #include void div(float a,float b) { printf("%f/%f=%f ",a,b,(a/b)); } mux.h extern void mux(float a,float b); mux.c #include void mux(float a,float b) { printf("%f*%f=%f ",a,b,(a*b)); } 不使用任何变量完成功能; makefile main:main.o add.o sub.o mux.o div.o gcc main.o add.o sub.o mux.o div.o -o main main.o:main.c add.h sub.h mux.h div.h gcc -c main.c -o main.o add.o:add.c gcc -c add.c -o add.o sub.o:sub.c gcc -c sub.c -o sub.o mux.o:mux.c gcc -c mux.c -o mux.o div.o:div.c gcc -c div.c -o div.o clean: rm *.o main 使用自定义变量让程序更加通用; makefile cc=gcc obj=main.o add.o sub.o mux.o div.o target=main objh=main.c add.h sub.h mux.h div.h $(target):$(obj) $(cc) $(obj) -o $(target) main.o:$(objh) $(cc) -c main.c -o main.o add.o:add.c $(cc) -c add.c -o add.o sub.o:sub.c $(cc) -c sub.c -o sub.o mux.o:mux.c $(cc) -c mux.c -o mux.o div.o:div.c $(cc) -c div.c -o div.o clean: rm *.o $(target) 使用预定义变量让程序更加通用。 makefile makefile obj=main.o add.o sub.o mux.o div.o target=main objh=main.c add.h sub.h mux.h div.h $(target):$(obj) $(CC) $^ -o $@ $(CFLAGS) main.o:$(objh) $(CC) -c $< -o $@ $(CFLAGS) add.o:add.c $(CC) -c $< -o $@ $(CFLAGS) sub.o:sub.c $(CC) -c $< -o $@ $(CFLAGS) mux.o:mux.c $(CC) -c $< -o $@ $(CFLAGS) div.o:div.c $(CC) -c $< -o $@ $(CFLAGS) clean: rm *.o $(target)