1. 如何在makefile中使用shell命令
LS=$(shell ls);
2. makefile中不同的文件夹之间用冒号“:”分隔。
3. 伪目标:
all:……
.PHONY all
在PHONY前面加了一个小减号的意思就是,也许某些文件出现问题,但不要管,继续做后面的事。。“伪目标”并不是一个文件,只是一个标签,由于“伪目标”不是文件,所以make无法生成它的依赖关系和决定 它是否要执行。
4. 自动化变量
a. @”表示目标的集合,就像一个数组,“$@”依次取出目标,并执于命令。
b. $<: "$<"表示依赖的目标集,不如.c(相对于.o文件) .0(相对于最终的目标文件)文件
c.
5. 过滤
使用filter可以按一定规则选取相应的文件。
比如:$(filter %.o,$(files))表示调用Makefile的filter函数,过滤“$filter”集,只要其中模式为“%.o”的内容。
6. 自动生成依赖性
cc -M main.c编译时将自动添加main.c的依赖.h文件。
7. 替换
“$(sources:.c=.d)”中的“.c=.d”的意思是做一个替换,把变量$(sources)所有[.c]的字串都替换成 [.d]
8. 命令执行
当依赖目标新于目标时,也就是当规则的目标需要被更新时,make会一条一条的执行其后的命令。需要注意的是,如果要让上一条命令的结果应用在下一条命令时,应该使用分号分隔这两条命令。
9. 命令出错
在mkaefile中执行命令前加短横线“-”,标记为不管成功以否都认为是成功的。
在执行make时添加 -i的选项,忽略错误
在执行make时添加 -k的选项,终止当前操作,继续执行后续操作。
10. 嵌套执行make
subsystem:
cd subdir && $(MAKE)
其等价于:
subsystem:
$(MAKE) -C subdir
11. 变量的使用
y = $(x) bar
x = foo
如上,则y = foo bar;
y := $(x) bar
x := foo
如上,则y = bar;
FOO ?= bar
如果FOO没有被定义过,那么变量FOO的值就是“bar”,如果FOO先前被定义过,那么这条语将什么也不做
12.
阅读(926) | 评论(0) | 转发(0) |