如何在makefile目标中使用args来源CSH脚本?

时间:2016-04-06 17:57:06

标签: makefile gnu-make csh

是否可以在makefile中获取CSH脚本,因为我在SH中拥有大部分目标命令,而且我不想将makefile的全局shell更改为CSH? 在我的makefile中,我需要做这样的事情:

myTarget:     
    source specialPreCshellScript.csh
    some_SH_steps ...
    source specialPostCshellScript.csh

谢谢

1 个答案:

答案 0 :(得分:1)

如果目标只是执行csh脚本中的命令而没有得到任何结果,则无需source

如果你确实需要取回一些东西 - 例如一些变量的值 - 我的建议是两个写一个csh包装脚本,将这些变量打印为sh - 兼容的赋值。

#!/bin/csh -f
source specialPreCshellScript.csh
printf "%s=%s\n" variable1 "$variable1" another "$another" third "$third"

称之为

eval $(csh_wrapper_script); ... do stuff with the variables

由于Make的工作原理(默认情况下),当命令行完成时,您从eval获得的设置将会丢失。因此,在您的示例中,some_SH_steps将无法访问csh的结果,除非您强制它在同一命令行中运行,可能是这样的:

eval $(csh_wrapper_script); some_SH_steps

并且类似地在csh之后添加第二个some_SH_steps脚本的包装器,如果您需要在同一个上下文中发生这种情况。