DevOps Makefile中使用shell赋值变量

摘自:https://www.dazhuanlan.com/tahao/topics/1562291

今天我为了makefile的方便起见,将一些变量通过脚本的形式给到makefile中,但是通过shell命令给makefile变量赋值让我头疼了一波.. 🙄

shell中赋值非常简单

1
2
3
4
➜ PRE_CKPT=log/20190405-174159        
➜ NUM=`python3 tools/get_trian_num.py ${PRE_CKPT}`
echo ${NUM}
4700

 

在 makefile 中实现

  1. 第一次写法
    1
    2
    3
    freeze: 
    NUM=`python3 tools/get_trian_num.py ${PRE_CKPT}`
    echo ${NUM}

执行,发现什么都没有输出

1
2
3
➜ make freeze PRE_CKPT=log/20190405-174159
NUM=`python3 tools/get_trian_num.py log/20190405-174159`
echo

 

这里的问题是,我们通过shell命令赋值的是shell的变量,这个变量还不是makefile的变量.所以我们需要通过$$VAR的方式调用这个变量.

  1. 第二次写法
    1
    2
    3
    freeze: 
    NUM=`python3 tools/get_trian_num.py ${PRE_CKPT}`
    echo $$NUM

执行,发现还是没有输出

1
2
3
➜ make freeze PRE_CKPT=log/20190405-174159
NUM=`python3 tools/get_trian_num.py log/20190405-174159`
echo $NUM

 

这里是因为makefile中命令如果没有使用;来连接,是无法共享变量的.所以还得修改

  1. 第三次写法
1
2
3
freeze: 
@NUM=`python3 tools/get_trian_num.py ${PRE_CKPT}`;
echo $$NUM

终于有了我想要的输出 😊

1
2
➜  make freeze PRE_CKPT=log/20190405-174159
4700

 

posted @   LiuYanYGZ  阅读(322)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2016-11-16 牛人博客
2016-11-16 c 、c++、java区别
2016-11-16 Java开发中的23种设计模式详解
点击右上角即可分享
微信分享提示