实验三 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 <stdio.h>
#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 <stdio.h>
void add(float a,float b)
{
	printf("%f+%f=%f\n",a,b,(a+b));
}

sub.h

extern void sub(float a,float b);

sub.c

sub.c
#include <stdio.h>
void sub(float a,float b)
{
	printf("%f-%f=%f\n",a,b,(a-b));
}

div.h

extern void div(float a,float b);

div.c

#include <stdio.h>
void div(float a,float b)
{
	printf("%f/%f=%f\n",a,b,(a/b));
}

mux.h

extern void mux(float a,float b);

mux.c

#include <stdio.h>
void mux(float a,float b)
{
	printf("%f*%f=%f\n",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)