makefile浅析(二)

来源:互联网 发布:淘宝网书籍 编辑:程序博客网 时间:2024/06/05 06:29

经过上期的讲解,我们已经知道了makefile是如何工作的了,在回顾一下,make的工作执行步骤就是:
1.读入所有的makefile
2.读入被include包含的其他makefile
3.初始化文件中的变量
4.推导隐晦规则,并分析所有规则
5.为所有的目标文件创建依赖关系链
6.依据依赖关系,决定那些目标要重新生成
7.执行生成命令

好了,这期我们来讲嵌套执行,并介绍一些命令

当我们完成一个庞大的项目时,不可能把所有的 .c 文件都写在一起吧,况且也不便于管理,我们会把文件分门别类的写到各个目录里面,比如有函数目录,声明目录等等,那我们该如何执行各个目录里面的 .c 文件,并把他们各自编译的 .o 文件,一起编译成一个可执行目标文件呢?
make 为我们提供了嵌套执行,说白了,就是在最外层的总控文件makefile提供的功能就是进入各个子目录里面执行make命令或make clean 命令,并提供把各个子目录生成的 .o 文件能集中生成一个可执行目标文件,然后各个子目录里面也有makefile文件,他的功能就是进入source里面执行make命令,把里面的 .c 文件编程为 .o 文件或者清除 .o文件,这就是一个简单的嵌套执行,其实为了便于后期的增删和维护,应该和c中的宏定义一样,将这些.c 文件和.o文件,都集中为一个变量,关于变量我们下期再讲,这期就简单的看看如何嵌套执行。
下面看一个例子:
我创建了一个client目录,里面有总控makefile,和各个子目录add,sub ,div,mul,main,这些子目录里面也有makefile文件和各个子目录src,在src 里面是各自的 .c 文件,add.c sub.c mul.c div.c main.c 在总控makefile里面实现的是进入子目录然后执行make,并将子目录里面的 .o文件编译成可执行目标文件,
cal:mm
gcc -o cal add/src/* .o mul/src/* .o div/src/* .o sub/src/* .o main/src/* .o
.PHONY:mm clean
mm:

$ (MAKE) -C add$ (MAKE) -C sub$ (MAKE) -C div$ (MAKE) -C mul$ (MAKE) -C main

clean:

$(MAKE) clean -C  add$(MAKE) clean -C  sub$(MAKE) clean -C  mul$(MAKE) clean -C div                                              $(MAKE) clean -C  main

各个子目录里面的makefile差不多一样(进入src里面编译,删除.o文件):
.PHONY : mm clean
mm:
gcc -c src/add.c -o src/add.o
clean:
rm -f src/ * .o

经过这个例子,小伙伴们是不是略微懂了些嵌套执行该怎么做了呢。
好了,还有变量的介绍书写规范等等,就请看下期博客哟!

0 0
原创粉丝点击