码迷,mamicode.com
首页 > 其他好文 > 详细

makefle-2

时间:2019-09-20 19:12:40      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:问题   执行命令   需要   知识   全局变量   test   一个   语法错误   才有   

一、变量的定义可能出现的地方只有两种
1、makefile全局变量:一定在target外部
2、出现在target内的shell内部的变量

3、target内部:
3.1:如果是makefile中的关键字语法,前面一定不能出现tab,否则会当成命令处理。
3.2:target内部若用的时shell的语法命令,必然会以tab开始。

举例:
all:
@if [ "debug" = "debug" ]; then TV3=test3_yes; echo $$TV3; else TV3=test3_no; fi

all:
@for i in 1 2 3; do echo "building " $$i; done
@echo "finall"

知识点1:
makefile会将上述内嵌的shell脚本当作一个独立的单元,它们在单独的进程中运行。里边定义的变量,只能在这个shell单独进程进行局部使用。
知识点2:
Shell进程使用自己的变量,应该以$$开头,且自己的变量是不需要括号。
shell进程内以makefile的方式引用shell进程内定义的变量会失败。
知识点3:
Shell脚本在target里才有效,其它地方都被忽略掉了。target外可以用$(shell 语句)方式

//makefile中语法关键字+tab(make时直接报错,语法错误)
all:
ifeq (1,1)
@echo "123"
endif

//不加空格(make时不会报错,但不会识别出这是一个shell脚本执行命令(也可以叫执行程序),将不会开启一个shll进程去执行程序,所以什么事情都不会做)
all:
@if [ "debug" = "debug" ]; then TV3=test3_yes; echo $$TV3; else TV3=test3_no; fi

//引用的变量方式或者范围出错:(make时不会报错,但打印不出来)
all:
@if [ "debug" = "debug" ]; then TV3=test3_yes; echo $$TV3; echo $(TV3); ?#变量引用方式出错,shell内部引用自己的变量。
else TV3=test3_no; fi
echo $(TV3) #变量范围使用错误

4、命令前@符号问题

如果不添加@,会将shell命令打印出来。

echo $(KVAL)       
@echo $(LIBS)           //不会把shell本身的命令echo打印出来。

总结:
上述的shll命令体现了:if then 、 for i in、makefile语法则有ifeq
shll脚本单条语句有;号,以""进行连接。makefile自身语法执行上不加;号。

makefle-2

标签:问题   执行命令   需要   知识   全局变量   test   一个   语法错误   才有   

原文地址:https://www.cnblogs.com/retry/p/11558658.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!