,,,,,,,,在makefile中是支持程序设计语言中变量的概念的,<强> >强。那么在makefile中的变量名的规则又有哪些呢?下来我们来看看变量的定义和使用,如下
,,,,,,,,下来我们以代码为例来进行分析说明
CC :=, gcc TARGET :=hello.out (目标),美元:func.o main.o ,,,(CC),美元-o 美元(目标),func.o main.o 时间:func.o func.c ,,,(CC),美元-o func.o -c func.c main.o : c ,,,(CC),美元-o main.o -c c .PHONY : rebuild clean 所有 rebuild : clean 所有 all : $(目标) ,,,, 时间:clean ,,,rm * .o 美元(目标)
,,,,,,,,我们来看看编译结果是否和之前一样
,,,,,,,,效果和之前是一样的,那么我们为何这样定义变量呢?在一些大型的工程项目中,我们可能要编译好几个版本,因此定义不同的目标便会编译出不同的版本。而且这种方法还有个好处就是编译器可以由我们自定义选择,比如我们将上面的gcc编译器换成g + +,则只需将CC:=gcc换成CC:=g++下来我们来看看编译效果
,,,,,,,,我们看到编译器已经换为g++了。下来我们来讲讲makefile中变量的赋值方式,分为四种:<强> >强。那么不同的赋值方式其意义是不同的!下来我们来对这四种赋值方式进行一一的解释说明
,,,,,,,,其用法如下
,,,,,,,,,其用法如下
,,,,,,,,其用法如下
,,,,,,,,其用法如下
,,,,,,,,下来我们还是以代码为例来进行说明
#,ex1 (:=) x :=foo y :=, $ b (x) x :=新 .PHONY :测试 test : ,,,@echo “#, ex1 (:=)“; ,,,@echo “x =祝辞,美元(x)“; ,,,@echo “y =祝辞,美元(y),
,,,,,,,,经过简单赋值后,x就为新了,而y则应该为foob。我们来看看编译效果
,,,,,,,,我们看到结果和我们所分析的是一样的。下来我们来看看递归赋值
#,ex2 (=) x =foo y =, $ b (x) x =新 .PHONY :测试 test : ,,,@echo “#, ex2 (=)“; ,,,@echo “x =祝辞,美元(x)“; ,,,@echo “y =祝辞,美元(y),
,,,,,,,,我们分析下,因为递归赋值是与目标相关的其他变量都会受到影响,那么x最后应该为新的y就应该为新手。我们来看看编译结果
,,,,,,,,为了更加形象对递归赋值进行说明,我们编写代码如下
a 美元=,(b) 时间=b (c)美元 c =hello-makefile .PHONY :测试 test : ,,,@echo “#, ex2 (=)“; ,,,@echo “x =祝辞,美元(x)“; ,,,@echo “y =祝辞,美元(y)“; ,,,@echo “a =祝辞,美元(一)“; ,,,@echo “b =祝辞,(b)“美元; ,,,@echo “c =祝辞,美元(c)“
,,,,,,,,我们定义一个依赖于b,而b依赖于c。此时c为hello-makefile,那么依赖于它的b也就变为hello-makefile了,此时依赖于b的一个也就变为hello-makefile了。x和y此时没定义,看看编译会报错吗?