正点原子--Makefile学习
一、常用shell命令
1."=",":=","?=","+="的区别:
(1)=
name = zzk
curname = $(name)
name = zuozhongkai
print:
@echo curname: $(curname)
输出:curname: zuozhongkai
变量的真实值取决于它所引用时变量的最后一次有效值
(2):=
name = zzk
curname := $(name)
name = zuozhongkai
print:
@echo curname: $(curname)
输出:curname: zzk
不会使用后面定义的变量,只能使用前面已经定义好的
(3)?=
name = zzk
curname ?= $(name)
name = zuozhongkai
print:
@echo curname: $(curname)
输出:curname: zuozhongkai
如果变量 curname 前面没有被赋值,那么此变量就是“zuozhongkai”,如果前面已经赋过值了,那么就使用前面赋的值。此例中curname先是没有被赋值,因此"?"就无意义了,例程就变成了=,与(1)中例子一样了。
(4)+= 追加
给前面已经定义好的变量添加一些字符串
objects = main.o inpiut.o
objects += calcu.o
一开始变量 objects 的值为“main.o input.o”,后面我们给他追加了一个“calcu.o”,因此变
量 objects 变成了“main.o input.o calcu.o”
@表示不输出命令本身
二、伪目标命令.PHONY
使用伪目标的主要是为了避免 Makefile 中定义的只执行命令的目标和工作目录下的实际文件出现名字冲突,例如
clean:
rm *.o
rm main
上述规则中并没有创建文件 clean 的命令,因此工作目录下永远都不会存在文件 clean,当我们输入“make clean”以后,后面的“rm *.o”和“rm main”总是会执行。可是如果在工作目录下创建一个名为“clean”的文件,那就不一样了,当执行“make clean”的时候,规则因为没有依赖文件,所以目标被认为是最新的,因此后面的 rm 命令也就不会执行,使用伪目标来更改。
.PHONY : clean
clean:
rm *.o
rm main
声明 clean 为伪目标,声明 clean 为伪目标以后不管当前目录下是否存在名
为“clean”的文件,输入“make clean”的话规则后面的 rm 命令都会执行。
(后续持续补充)