makefle-2

Posted retry

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了makefle-2相关的知识,希望对你有一定的参考价值。

一、变量的定义可能出现的地方只有两种
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的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段——声明函数