【问题标题】:Windows 10 Makefile source The system cannot find the file specifiedWindows 10 Makefile source 系统找不到指定的文件
【发布时间】:2021-09-15 16:48:37
【问题描述】:

我有一个非常简单的 makefile,我正尝试在 Windows 10 机器上的 git-bash 中执行它。

makefile的内容是:

start:
    source env.sh

其中env.sh 是存在的本地文件。

如果我执行命令make start 我会收到以下错误:

process_begin: CreateProcess(NULL, source env.sh, ...) failed.
make (e=2): The system cannot find the file specified.
make: *** [Makefile:2: start] Error 2

但是,如果我在命令提示符处执行source env.sh,一切都很好,我根本没有收到任何错误。

我已经看到类似Windows 10 Makefile error make (e=2): The system cannot find the file specified 的其他帖子报告了类似的错误,但链接的问题与 docker 正在我认为不适用于此处的路径有关。

makefile 出错但输入命令却没有的原因有什么?

【问题讨论】:

  • 这真的是完整的食谱吗?只是source env.sh 没有别的?因为那实际上不会做任何事情。

标签: makefile git-bash


【解决方案1】:

默认情况下,在 Windows 上,GNU make 始终运行 Windows cmd.exe shell。您在此处运行的配方是 bash 命令。

你说它在命令提示符下工作 但那是因为你使用的命令提示符来自 Git bash;如果您打开 Windows 终端并输入该命令,它将无法正常工作。

如果你想使用不同于默认的 shell,你需要在你的 makefile 中设置 SHELL make 变量:

SHELL := <path to git bash>

【讨论】:

  • 在我的makefile中使用echo $(SHELL)输出C:/Program Files/Git/usr/bin/sh.exe,所以我认为这里没有使用cmd。
  • 好吧,我不知道该告诉你什么,但是当 make 认为它正在运行 cmd.exe 时,你会得到该错误消息,其中 source 不是内置的 shell。我建议您像上面提到的那样明确设置 SHELL 并查看它是否有效。或者,如果您的 PATH 中有 bin 目录,您可以使用 SHELL := sh.exe 看看是否有效。
  • 我已经这样做了,仍然得到与原始问题相同的错误
  • 好的,试试这个:将你的source env.sh 更改为. env.sh,这是符合 POSIX 的编写方式(source 是 POSIX 标准的 bash 扩展)。你的 Git bin 目录中有 bash.exe 吗?如果您将SHELL 设置为bash.exe,当您使用source env.sh 时,该故障会消失吗?
猜你喜欢
  • 2018-12-22
  • 2019-05-03
  • 1970-01-01
  • 2016-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多