【发布时间】:2010-12-18 09:17:48
【问题描述】:
我有一个 makefile 来使用 Xerox 的有限状态工具(在本例中为 xfst)构建一些传感器,我在我的 makefile 中像这样调用它(当然,除了在实际的 makefile 中使用硬制表符而不是空格):
latin.fst: nouns.fst verbs.fst
xfst -f build/latin.fst.build
在我的笔记本电脑(一台装有 OS X 10.6.2 的 Mac)上,这工作得很好,但在我大学的 Linux 机器上,我得到了这个错误:
make: xfst: Command not found
make: *** [nouns.fst] Error 127
经过一些调试,我找到了两种解决此问题的方法。第一种是将-f参数引用到xfst:"-f",另一种是在makefile的顶部说SHELL=/bin/bash。
从第二个修复(以及 make 如何工作)看来,问题在于 /bin/sh 如何执行命令。现在,/bin/sh 链接到 /bin/bash,所以这不是因为某种奇怪的 shell 被安装为 /bin/sh。此外,调用 /bin/sh 并运行命令,或调用 /bin/sh -c "xfst -f build/latin.fst.build" 也很有效。
Make 是 GNU Make 3.81,bash 是 GNU bash,版本 3.2.25(1)-release。
有人知道这里发生了什么吗?
【问题讨论】: