欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

Makefile —— Makefile的规则是什么?make是如何工作的?make的工作方式是什么?

发布时间:2025/10/17 71 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Makefile —— Makefile的规则是什么?make是如何工作的?make的工作方式是什么? 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

#1、Makefile的规则:
#   target... : prerequisites...
#        command

target是:【目标文件:包含执行文件edit与中间目标文件(*.o)文件】
prerequisites是: 【依赖文件:包含冒号后面那些.c文件与.h文件;edit的依赖文件是所有.o文件】
command是:【命令:定义了如何生成目标文件的操作系统命令,一定要以Tab键作为开头】

#2、make什么时候执行command命令?
#    make会比较targets文件和prerequisites文件的修改日期,如果prerequisutes文件的日期要比targets文件的日期要新,或者target不存在的话,那么,make就会执行后续定义的命令

#3、clean不是一个文件,它不过是一个动作名字,有点像c语言中的lable一样,
#            其冒号后什么也没有,那么,make就不会自动去找文件的依赖性,也就不会自动执行其后所定义的命令
#            要执行其后的命令,就要在make命令后明显的指出这个lable的名字。    
#    为了避免和文件重名的这种情况,我们可以使用一个特殊标记".PHONY"来显示地知名一个目标是"伪目标"
#            向make说明,不管是都有这个文件,这个目标就是"伪目标"

a.c a.h b.c b.h common.h文件代码如下:

#a.c [root@localhost MakeFile]# cat a.c #include "common.h" #include "a.h"int main(void) {printf("aaa\n");testb();printf("a:%d\n", strlen("asafxxxxxx"));return 0; }#a.h [root@localhost MakeFile]# cat a.h #include <stdio.h>#b.c [root@localhost MakeFile]# cat b.c #include "common.h" #include "b.h"void testb(void) {printf("bbb\n");printf("b:%d\n", strlen("asaf"));return ; }#b.h [root@localhost MakeFile]# cat b.h #include <stdio.h>#common.h [root@localhost MakeFile]# cat common.h #include <string.h> #include <unistd.h>

Makefile文件代码如下: 

export CC=gcc all:edit@echo "all"edit:b.o a.o@$(CC) a.o b.o -o edit@echo "edit" a.o:a.c a.h common.h@$(CC) -c a.c -o a.o@echo "a.o" b.o:b.c b.h common.h@$(CC) -c b.c -o b.o@echo "b.o".PHONY:clean clean:@rm a.o b.o edit -f

# 4、make是如何工作的?
# 若工程首次被编译:
# 1》make会在当前目录下找到"Makefile"的文件;
# 2》如果找到,就会找文件中的第一个目标文件(target),在上面的例子中找到"all"这个文件;
# 3》"all"所需的目标是"edit","edit"文件所需文件都为[.o]文件,所以此文件作为最终的目标文件;
# 4》如果edit文件不存在,或者是edit所依赖的后面的[.o]文件的文件修改时间要比edit这个文件新,
#     那么,他就会执行后面所定义的命令来生成edit这个文件;
# 5》如果edit所依赖的.o文件也存在,那么make会在当前文件中找目标为.o文件的依赖性,
#     如果找到,则再根据那一个规则生成.o文件;
# 6》执行edit文件。

结果如下:

[root@localhost MakeFile]# make -f 1_makefile.bak b.o a.o edit all [root@localhost MakeFile]# ./edit aaa bbb b:4 a:10# # # 若工程未被编译过: #         打印结果为: b.o >然后是> a.o >然后是>  edit >然后是> all # 若编译好后,只是修改了a.h文件: #         打印结果为:  a.o >然后是> edit >然后是> all #

# make的工作方式:
#     1》读入所有的Makefile
#     2》读入被include的其他的Makefile
#     3》初始化文件中的变量
#     4》推导隐晦规则,并分析所有规则
#     5》为所有的目标文件创建依赖关系链
#     6》依据依赖关系,决定那些目标要重新生成
#     7》执行生成命令

总结

以上是生活随笔为你收集整理的Makefile —— Makefile的规则是什么?make是如何工作的?make的工作方式是什么?的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。