​

今天我为了​​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