变量和不同的赋值方式(四)

  

,,,,,,,,在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此时没定义,看看编译会报错吗?

变量和不同的赋值方式(四)

变量和不同的赋值方式(四)