,,,,,,,,我们在前面学习了makefile中的路径搜索,那么我们今天就来实战演练下。需求分析:
,,,,,,,,我们来看看这种项目的类型,如下
,,,,,,,,那么我们需要的工具原料有:。这里面的关键技巧有:。下来我们来看看编译规则的依赖,如下图所示
,,,,,,,,下来我们来看看makefile怎么写,src和公司文件夹还是之前的
.PHONY : all clean 重建 DIR_BUILD :=,构建 DIR_SRC :=src DIR_INC :=公司 TYPE_INC :=. h TYPE_SRC :=. c TYPE_OBJ :=. o CC :=gcc CFLAGS :=,小姐;$ (DIR_INC) ifeq (美元(调试),真的) CFLAGS +=- g endif MKDIR :=mkdir RM :=RM 射频 APP :=, (DIR_BUILD)/app.out美元 HDRS :=,美元(wildcard (DIR_INC)/*美元(TYPE_INC)) HDRS :=, $ (notdir $ (HDRS)) OBJS :=,美元(wildcard (DIR_SRC)/*美元(TYPE_SRC)) OBJS :=, $ (obj: $ (TYPE_SRC)=$ (TYPE_OBJ)) OBJS :=,美元(patsubst $ (DIR_SRC)/%, $ (DIR_BUILD)/%,美元(obj)) vpath % $ (TYPE_INC),美元(DIR_INC) vpath % $ (TYPE_SRC),美元(DIR_SRC) 时间:all (DIR_BUILD),美元(应用) ,,,@echo “Target File ==祝辞,美元(APP)“; $ (DIR_BUILD),: ,,,(MKDIR), @美元 $(应用程序),:美元(obj) ,,,(CC),美元-o $ @ $ ^ (DIR_BUILD)/% (TYPE_OBJ)美元,:,% (TYPE_SRC),美元(使用hdr拍摄) ,,,(CC)美元,美元(CFLAGS), -o @ 美元;-c $ & lt; clean : ,,,(RM), (DIR_BUILD)美元 rebuild : ,,,(使)美元,干净 ,,,(使)美元,所有
,,,,,,,,我们看到变量使用hdr拍摄是先进入到公司的文件夹下获取到所需的. h头文件,然后再经过notdir去除掉它的路径名。我们利用TYPE_XXX来定义相应的头文件(或源文件或目标文件),这样做是为了让这个makefile具有更好的移植性。利用vpath来指定相应的路径。通过调试宏判断它是否为调试版本。下来我们先来看看它是否能正常工作。
,,,,,,,,我们看到它已经正确工作了,并且在构建文件夹下生产相应的app.out以及. o文件,原公司和src文件夹并没有被污染。这便达到了我们的要求了,如果是换一个类似的项目(包含有. h的头文件库和C的源文件库),我们也能直接拿去这个makefile进行使用,如果是c++项目,那么我们换个g++编译器就可以正常工作。但是有个小问题,就是如果其中有一个头文件改动,整个项目就必须全部编译。我们就得思考了:对于规则较小的项目,我们在makefile中是否也需要使用自动生成依赖关系的解决方案呢?如果使用自动生成依赖关系的解决方案,那么整个的makefile代码的编写就相当复杂了。我们究竟该如何做呢?如果对于较小的项目,我们就不必使用自动生成依赖关系,因为此时不但是makefile的编写比较复杂,而且不利用后期的维护。
,,,,,,,,通过对路径搜索的综合开发的学习,总结如下:
,,,,,,,,