【实验目的】
了解Makefile的基本概念和基本结构.
初步掌握编写简单Makefile的方法.
了解递归Make的编译过程
初步掌握利用GNU Make编译应用程序的方法
【实验步骤】
使用命令行的方式手动编译程序方法
利用文本编辑器创建hello.c文件
//hello.c
//written by Emdoor
#include <stdio.h>
int main()
{
printf("WelcomeEmdoor!\n");
return1;
}
手动编译hello应用程序,在hello.c的目录的终端下输入:
[root@local]$ gcc –c hello.c
[root@local]$gcc hello.o –o hello
通过ls命令查看当前目录下是否生成源代码hello.c的object文件hello.o和可执行文件hello,运行可执行文件hello。查看一下运行结果。
[root@local]$./hello
修改hello.c文件,重新手动编译应用程序。
删除hello.o和hello文件
[root@local]$rm –f hello.o
[root@local]$rm –f hello
利用 GNU make 自动编译应用程序方法
利用文本编辑器创建一个makefile文件,并将其保存到与hello.c相同的目录下。
# makefile test for hello program
#written by Emdoor
CC=gcc
CFLAGS=
hello: hello.o
$(CC)$(CFLAGS) hello.o –o hello
hello.o: hello.c
$(CC)$(CFLAGS) –c hello.c –o hello.o
clean:
rm–rf hello *.o
先后执行如下命令:
[root@local]$make
[root@local]$ls
[root@local]$./hello
查看并记录所生成的文件和运行的结果。
执行make clean命令:
[root@local]$make clean
修改hello.c文件,重复第2、3步操作,查看并记录所生成的文件和运行结果。
重新编辑makefile文件(斜黑体表示修改部分)
# makefile test for hello program
#written by Emdoor
CC=gcc
CFLAGS=
OBJS=hello.o
all: hello
hello: $(OBJS)
$(CC)$(CFLAGS) $^ -o $@
hello.o: hello.c
$(CC)$(CFLAGS) –c $< -o $@
clean:
rm–rf hello *.o
重复第2,3步操作,查看并记录所生成的文件和运行的结果。比较这两种操作,写出你的结论。同时指出$^ 、$@、$<在上述Makefile中的含义。
多个.c文件的编译
创建文件hello1.c、hello2.c、hello.h和makefile
//hello1.c
//written by Emdoor
#include <stdio.h>
int main()
{
printf("WelcomeEmdoor!\n");
test2();
return1;
}
//hello2.c
//written by Emdoor
#include "hello2.h"
#include <stdio.h>
void test2(void)
{
printf("WelcomeEmdoor! –hello2\n");
}
//hello2.h
//written by Emdoor
void test2(void);
# makefile test for multi files program
#written by Emdoor
CC=gcc
CFLAGS=
OBJS=hello1.o hello2.o
hello: $(OBJS)
$(CC)$(CFLAGS) $^ -o $@
hello1.o: hello1.c
$(CC)$(CFLAGS) –c $< -o $@
hello2.o: hello2.c
$(CC)$(CFLAGS) –c $< -o $@
clean:
rm–rf hello *.o
先后执行如下命令
[root@local]$make
[root@local]$ls
[root@local]$./hello
查看并记录所生成的文件和运行的结果, 写出结论。