Makefile简单的实例教程

时间:2020-12-27 14:41:07

【实验目的】

了解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

查看并记录所生成的文件和运行的结果, 写出结论。