代码之家  ›  专栏  ›  技术社区  ›  arnsholt

/从make调用的bin/sh找不到带有未引破折号参数的命令

  •  3
  • arnsholt  · 技术社区  · 16 年前

    我有一个makefile来使用Xerox的有限状态工具(在本例中是xfst)构建一些传感器,我在makefile中调用它,就像这样(当然,除了在实际的makefile中使用硬选项卡而不是空格):

    latin.fst: nouns.fst verbs.fst
        xfst -f build/latin.fst.build
    

    在我的笔记本电脑上(一个带有10.6.2操作系统的Mac电脑),这工作得很好,但是在我大学的Linux机器上,我得到了一个错误:

    make: xfst: Command not found
    make: *** [nouns.fst] Error 127
    

    经过一些调试,我找到了两种方法来解决这个问题。首先是引用 -f xfst的参数: "-f" SHELL=/bin/bash 在生成文件的顶部。

    /bin/sh -c "xfst -f build/latin.fst.build"

    Make是GNU Make 3.81,bash是gnumbash,版本3.2.25(1)-发布版。

    有人知道这是怎么回事吗?

    3 回复  |  直到 16 年前
        1
  •  2
  •   Beta    16 年前

    这是一个奇怪的错误,我不知道是什么导致的,但我要尝试的是:

    .PHONY: experiment
    experiment:
        @echo make's SHELL variable: $(SHELL)
        @echo the actual shell: $$SHELL
        which xfst
    

    编辑:
    等等。。。错误消息说Make在尝试Make时失败名词.fst,不是拉丁语.fst. 对吗?(如果是,那么这个问题就变得更奇怪了。)

    编辑:
    好吧,现在我在抓救命稻草。我会扩大搜索范围,尝试运行其他带有选项的程序,尝试给“xfst-f”取别名,尝试建立到xfst的本地符号链接,尝试用引号或反勾号括住整个命令。。。然后承认我完全被难住了。

        2
  •  0
  •   Ned Deily    16 年前

    也许你修改了 bash -特定启动文件( .bashrc .bash_profile )改变你的 $PATH 在Linux机器上包括 xfst 位于。在那种情况下 /bin/sh 不会调用 .bash* 所以正确的目录不会在您的路径上。

        3
  •  0
  •   Dennis Williamson    16 年前

    0x0a ,DOS和Windows使用 0x0d 0x0a 和Macs使用 0x0d . 试着用 hd filename 查看您有什么样的样式行结尾(它们甚至可能在文件中有所不同)。