Using bash variables in Makefile

前端 未结 3 1226
被撕碎了的回忆
被撕碎了的回忆 2020-12-11 16:58

I want to use the bash timing variables in my makefile for example in my terminal I can do this and it works

 MY_TIME=$SECONDS 
 echo $MY_TIME
3条回答
  •  春和景丽
    2020-12-11 17:43

    By default make uses /bin/sh as the shell which executes recipe lines.

    Presumably /bin/sh doesn't support the SECONDS variable.

    You can tell make to use a different shell by assigning a value to the SHELL variable (i.e. SHELL := /bin/bash).

    Doing that will make SECONDS available but will still not allow you to carry a variable value between recipe lines as each recipe line is run in its own shell.

    So to do what you want you would need to write both of those lines on one line or continue the line over the newline.

    .PHONY: myProg
    myProg:
          MY_TIME=$SECONDS; echo $MY_TIME
    

    or

    .PHONY: myProg
    myProg:
          MY_TIME=$SECONDS; \
          echo $MY_TIME
    

    That being said you would almost certainly be better off not doing this and instead using something like date invoked at the start/end of the recipe or time invoked on the command to be timed directly instead.

    .PHONY: myProg
    myProg:
          date
          # Do something
          date
    

    or

    .PHONY: myProg
    myProg:
          time some_command
    

提交回复
热议问题