Make命令选项和隐含规则
Make使用
选项:
-C dir读入指定目录下的Makefile
-f file读入当前目录下的file文件作为Makefile
-i 忽略所有的命令执行错误(尽可能执行命令)
-I dir指定被包含的Makefile所在目录
-n 只打印要执行的命令,但不执行这些命令
-p 显示make变量数据库和隐含规则
-s 在执行命令时不显示命令
-w 如果make在执行过程中改变目录,打印当前目录名
Uboot的一些配置:
include config.mk
config.mk
OBJS=f1.o f2.o OBJS+= main.o CFLAGS=-c -Wall
Makefile隐含规则
*.o的目标的依赖目标会自动推导为*.c,并且其生成命令是$(CC) –c $(CPPFLAGS) $(CFLAGS)
CFLAGS=-c - Wall - I - include f1.o:f1.c f2.o:f2.c
默认只有-c 所以我们要自定义CFLAGS
* 目标依赖于*.o,通过运行C的编译器来运行链接程序生成(一般是“ld”),其生成命令是:$(CC) $(LDFLAGS) *.o $(LOADLIBES) $(LDLIBS)。这个规则对于只有一个源文件的工程有效,同时也对多个Object文件(由不同的源文件生成)的也有效。
例如:
f1:f1.o f2.o
就会自动查找f1.c、f2.c然后一步步生成。
如果没有一个源文件(如上例中的x.c)和你的目标名字(如上例中的x)相关联,那么,你最好写出自己的生成规则,不然,隐含规则会报错的。
意思就是下面的不会执行:
test:f1.o f2.o
VPATH用法和Makefile嵌套
VPATH : 虚路径
当make需要去找寻文件的依赖关系时,你可以在文件前加上路径,但最好的方法是把一个路径告诉make,让make在自动去找。Makefile文件中的特殊变量“VPATH”就是完成这个功能的,如果没有指明这个变量,make只会在当前的目录中去找寻依赖文件和目标文件。如果定义了这个变量,那么,make就会在当当前目录找不到的情况下,到所指定的目录中去找寻文件了。
VPATH = src ../headers
上面的的定义指定两个目录,“src”和“…/headers”,make会按照这个顺序进行搜索。目录由“冒号”分隔。(当然,当前目录永远是最高优先搜索的地方)
Makefile的嵌套
CC=gcc SUBDIRS=f1 \ f2 \ main \ obj OBJS=f1.o f2.o main.o BIN=myapp OBJS_DIR=obj BIN_DIR=bin export CC OBJS BIN OBJS_DIR BIN_DIR all:CHECK_DIR $(SUBDIRS) CHECK_DIR: mkdir -p $(BIN_DIR) $(SUBDIRS):ECHO make -C $@ ECHO: @echo $(SUBDIRS) @echo begin compile CLEAN: @$(RM) $(OBJS_DIR)/*.o @rm -rf $(BIN_DIR)
@echo $(SUBDIRS)命令本身不显示 只是打印
make -C $@就是调入子makefile
export CC OBJS BIN OBJS_DIR BIN_DIR用于子目录也能使用对应的变量
写在最后
今天主要讲解了工程管理的,有些东西非常常用,在接下来的数据结构会更加常用到,大家学废了么?从明天开始正式进入数据结构专题!最后三连即可提高学习效率!!!
另外我在更新的就是算法笔记的一些例题笔记,这个系列是用于提高我的算法能力,如果有兴趣对算法领域感兴趣找不到合适的入门文章也可以追更,如果我更新的太慢了请大家点赞收藏,一键三连才能更有更新的动力呀0.0