makefile 初探之《规则及介绍》

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/WZJwzj123456/article/details/85391175

1:规则实例

在讲述这个 Makefile 之前,还是让我们先来粗略地看一看 Makefile 的规则。 
target ... : prerequisites ... 
    command 
target 也就是一个目标文件,可以是 Object File,也可以是执行文件。
prerequisites 就是,要生成那个 target 所需要的文件或是目标。
command 也就是 make 需要执行的命令。(任意的 Shell 命令) 
    这是一个文件的依赖关系,也就是说,target 这一个或多个的目标文件依赖于prerequisites 中的文件,其生成规则定义在 command 中。说白一点就是说,prerequisites中如果
有一个以上的文件比 target 文件要新的话,command 所定义的命令就会被执行。这就是 Makefile 的规则。也就是 Makefile 中最核心的内容

下面我们下面我们从一个实例中来看一下Makefile的编写方式

    首先目录下包含了这些文件 add.c add.h sub.c sub.h cal.c。其中cal.c要调用add.c 和sub.c 中的函数,也就是说cal.c要依赖add.c和sub.c

cal : add.o sub.o cal.o
	gcc -o cal add.o sub.o cal.o
add.o : add.c
	gcc -c add.c
sub.o : sub.c
	gcc -c sub.c
cal.o : cal.c
	gcc -c cal.c
clean :
	rm *.o cal

上面是makefile的文件编写,第一行中cal : add.o sub.o cal.o

cal为目标,add.o sub.o cal.o为生成目标的所需依赖

第二行表示要执行的shell命令生成目标文件cal,到此处我们已将我们的最终目标生成,但是该目标还有add.o sub.o cal.o几个依赖文件

后面几行就是生成add.o sub.o cal.o所执行的步骤,他们都符合Makefile的规则:

target ... : prerequisites ... 
    command 

最后面我们添加一个clean命令,该命令删除所有Makefile在生成目标文件cal过程中生成的文件,主要包括add.o sub.o cal.o还有cal。其中*.o表示删除所有.o文件

下面我们执行以下make命令看一下效果

扫描二维码关注公众号,回复: 5401754 查看本文章

从上图可以看出makefile执行的步骤,显示生成了add.o sub.o cal.o这几个依赖文件,最后生成cal目标文件

我们再看一下执行make clean后的效果

执行make clean 后删除了add.o sub.o cal.o和cal文件。

makefile执行过程

在默认的方式下,也就是我们只输入 make 命令。那么, 
1、make 会在当前目录下找名字叫“Makefile”或“makefile”的文件。 
2、如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“cal”这个文件,并把这个文件作为最终的目标文件。 
3、如果 cal文件不存在,或是 cal所依赖的后面的 .o 文件的文件修改时间要比 edit这个文件新,那么,他就会执行后面所定义的命令来生成 cal这个文件。 
4、如果 cal所依赖的.o 文件也存在,那么 make 会在当前文件中找目标为.o 文件的依赖性,如果找到则再根据那一个规则生成.o 文件。(这有点像一个堆栈的过程) 
5、当然,你的 C 文件和 H 文件是存在的啦,于是 make 会生成 .o 文件,然后再用 .o 文件生命 make 的终极任务,也就是执行文件 cal了

猜你喜欢

转载自blog.csdn.net/WZJwzj123456/article/details/85391175