实验三 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)