我有一个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。
有谁知道这里发生了什么?
答案 0 :(得分:2)
这是一个奇怪的错误,我不知道是什么导致它,但这是我尝试的:
.PHONY: experiment experiment: @echo make's SHELL variable: $(SHELL) @echo the actual shell: $$SHELL which xfst
修改:
等一下......错误信息显示在尝试制作nouns.fst时失败,而不是latin.fst。是对的吗? (如果是的话,那么这个问题就更奇怪了。)
修改:
好吧,现在我抓着稻草。我扩大了搜索范围,尝试运行其他带有选项的程序,尝试别名“xfst -f”,尝试创建一个到xfst的本地符号链接,尝试用引号或反引号括起整个命令......然后只是承认我完全被难住了。
答案 1 :(得分:0)
也许您修改了bash
特定的启动文件(.bashrc
或.bash_profile
)来更改Linux计算机上的$PATH
以包含xfst
所在的目录} 位于。在这种情况下,在/bin/sh
下运行不会调用.bash*
,因此正确的目录不会在您的路径上。
答案 2 :(得分:0)
无论何时在使用不同行结尾的系统之间移动,最好还是检查这是否是您遇到的问题的罪魁祸首。我相信你知道,Linux和Unix使用0x0a
,DOS和Windows使用0x0d 0x0a
,Mac使用0x0d
。尝试查看该文件
hd filename
查看您拥有的样式行结尾(它们甚至可能在文件中有所不同)。