-
recipe语法-
说明
-
执行
- 默认是一行行的执行.
.ONESHELL:,recipe一次性执行.
-
recipe脚本类型- 默认
/bin/sh. - 修改
SHELL为其他.
- 默认
-
解析案例
.ONESHELL: .PHONY:all all: @for i in {1..9} do echo $$i done- 定义
.ONESHELL:和不定义是两个执行结果.
- 定义
-
脚本解析器
.PHONY:all .ONESHELL: SHELL:= $(shell which python) all: @for i in range(9): print(i)- 定义和不定义
SHELL是两个结果.
- 定义和不定义
-
执行模型
def exeRecipe(target): if not target.oneshell: return os.system("\n".join(target.recipes)) for i in target.recipes: ret = os.system(i).returnValue if ret: return ret return 0
-
-
语义
-
make对recipe的处理
-
-
recipe输出 -
recipe执行-
说明
-
一次性执行
-
修改脚本类型
-
recipe处理$(SHELL) $(.SHELLFLAGS) recipe- 修改
SHELL类型为其他就可以修改recipe的值. - 不同
rule不同SHELL,可以通过局部变量的方式设置.
-
案例
.PHONY:all ok .ONESHELL: all:SHELL:=$(shell which bash) all:ok @echo ok ok:SHELL:=$(shell which python) ok: @import re print(re) -
SHELL来源SHELL不会从环境变量中继承,其他的都可以.SHELL的值默认是/bin/sh.- 用户自定义了
SHELL,如果不export是不会继承下去的.shell环境变量依然向下继承.
-
-
-
并行编译
-
错误处理
-
中断
-
递归调用
-
说明
-
-C -
MAKE变量 -
make之间参数传递-
指定上定义变量
make name=value,父子之间会继承.
-
顶层
make- 顶层
make继承父进程shell的环境变量值. - 优先级:
env < makefile.-e选项:env > makefile.
- 顶层
-
子
make- 继承父
make的环境变量.执行recipe也会继承. - 父
make可以通过export添加环境变量. - 优先级同上.
- 继承父
-
变量传递
- 环境变量,指令中声明.
- 变量名只能是数字字母下划线.
export name[op value|names].export传递所有.定义.EXPORT_ALL_VARIABLES:也传递所有,前者新版本,现在基本都支持;后者老版本,兼容性更好- 可以禁止传递部分变量.
- 禁止传递
unexport names
-
SHELLSHELL变量值不会传递.- 最顶层的
shell的值会传递为默认. - 可以使用
export强制向下传递.
-
MAKEFLAGS- 始终传递.
-
MAKELEVEL- 从
0开始,输出递归深度. - 全局共享.一般用作条件判断.
- 案例:
.PHONY:all ifeq ($(MAKELEVEL),0) all: @echo $(MAKELEVEL) @$(MAKE) -f makefile else all: @echo ok endif - 从
-
MAKEFILES- 让子
Make预读一些makefile文件.
- 让子
-
-
选项参数部分传递
-
传递方式
- 借助变量
MAKEFLAGS. make -ks这个值就是ks.
- 借助变量
-
说明
- 基本每一个子
make都有这个环境变量.
- 基本每一个子
-
变量定义传递
- 也是通过
MAKEFLAGS,也是=格式. - 不想传递可以
$(MAKE) -C subdir MAKEFLAGS=
- 也是通过
-
不传递的选项
-C,-f,o,W.
-
并行编译
-j- 系统支持,那么使用这个的父
make可以和所有子make交互. - 父
make确保最多N个同时处理,信号量. - 任何一个任务被标记为
recursive都不会算在总的job里面. - 递归算在内那就没有真正执行的了.有可能递归很深就导致一个都不执行.
- 系统支持,那么使用这个的父
-
值定义的值
.PHONY:all ifeq ($(MAKELEVEL),0) all: @echo $(MAKELEVEL) @$(MAKE) -f makefile -b aa=bb else all: @echo ok @echo $(MAKEOVERRIDES): $(MAKEFLAGS) endif- 实际值定义位置在
MAKEOVERRIDES.MAKEFLAGS实际是个值引用. - 不想传递值定义,仅仅传递选项就可以将这个的值设置有空.
- 一般不会用,不过有的时候因为变量定义导致参数太长需要忽略参数定义.
- 实际值定义位置在
-
-
--print-directory
-
-
打包
recipe -
空的
rule
更新脚本怎么写
最新推荐文章于 2024-11-09 23:57:55 发布
部署运行你感兴趣的模型镜像
您可能感兴趣的与本文相关的镜像
TensorFlow-v2.9
TensorFlow
TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型
522

被折叠的 条评论
为什么被折叠?



