Makefile中使用shell赋值变量

工具使用
Published

April 6, 2019

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

shell中执行方式

shell中赋值非常简单

 PRE_CKPT=log/20190405-174159        
 NUM=`python3 tools/get_trian_num.py ${PRE_CKPT}`
 echo ${NUM}
4700

在makefile中实现

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

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

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

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

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

执行,发现还是没有输出

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

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

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

终于有了我想要的输出 😊

  make freeze PRE_CKPT=log/20190405-174159
4700