【发布时间】:2015-02-01 15:52:54
【问题描述】:
我有一个这样的生成文件:
setup:
setenv var1 "$(var1)"; \
setenv var2 "$(var2)";
task1: setup
source task1.csh
task2: setup
source task2.csh
我使用这个命令调用makefile:
make var1=value1 var2=value2 task1
我希望环境变量 var1 和 var2 在 task1.csh 和 task2.csh 中可见,但除非我将 makefile 更改为:
task1:
setenv var1 "$(var1)"; \
setenv var2 "$(var2)"; \
source task1.csh
task2:
setenv var1 "$(var1)"; \
setenv var2 "$(var2)"; \
source task2.csh
为什么第一种方法不起作用,我该如何解决?
【问题讨论】:
-
我应该指出,你永远不应该使用 csh 来编写 make 食谱。csh 是一个太破的 shell,无法与 make 一起使用。确实,它的外壳太破了,无法在其中编写脚本,但这是另一天的讨论。
-
@MadScientist:我实际上正在使用 tcsh。还是不推荐?
-
不推荐使用 Csh 和包括 tcsh 在内的所有变体。如果需要,可以将它们用作交互式 shell(我个人不这样做,因为(a)像 bash 这样的现代 Bourne shell 具有任何 csh/derivative 的所有交互功能等等,并且(b)我写了很多小的单行脚本在我的交互式 shell 的命令行上,但无论如何),但 csh 从根本上无法与 make 一起使用;请参阅lists.gnu.org/archive/html/bug-make/2010-12/msg00017.html,有关 csh 脚本的更多详细信息,请参阅www-uxsup.csx.cam.ac.uk/misc/csh.html
标签: makefile environment-variables gnu-make