GNU Make 配方中的变量,这可能吗?

Mag*_*nus 26 make

GNU Make 配方中是否可以有变量?

像这样的东西不起作用:

%_t.mkd : %.mkd
    REV=$$(svn info $<|grep 'Last Changed Rev'|cut -f4 -d\ )
    echo $${REV}
Run Code Online (Sandbox Code Playgroud)

有什么方法可以使这项工作发挥作用吗?

如您所见,我想要的是提取文件已更改的修订版,然后在完整配方中稍后使用该修订版。不幸的是,我无法使用,svn:keywords因为我需要相关文档之外的修订号。

小智 18

谢谢 /sf/ask/456346411/

这是更改配方中变量的解决方案:

recipe: 
        $(eval variablename=whatever)
Run Code Online (Sandbox Code Playgroud)


use*_*686 14

这不起作用,因为该make工具为每个配方行启动一个新的 shell 进程。并且 shell 变量——即使是“导出”的环境变量——也不可能“向上”传播;一旦 shell 进程退出,它们就消失了。


vim*_*ude 5

根据@user3645902提到的内容,以下是主要问题的解决方案:

recipe:
    @$(eval REV=`svn info $<|grep 'Last Changed Rev'|cut -f4 -d`)
    @echo $(REV)
Run Code Online (Sandbox Code Playgroud)