加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

makefle-2

发布时间:2020-12-16 01:41:00 所属栏目:安全 来源:网络整理
导读:一、变量的定义可能出现的地方只有两种 1、makefile全局变量:一定在target外部 2、出现在target内的shell内部的变量 3、target内部: 3.1:如果是makefile中的关键字语法,前面一定不能出现tab,否则会当成命令处理。 3.2:target内部若用的时shell的语法命令

一、变量的定义可能出现的地方只有两种
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自身语法执行上不加;号。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读