30

我在 Windows 中使用 makefile 在 Unix 服务器上推送一些文件(这里是我的 makefile 同一文件夹中的文本文件“blob.txt”)。我的makefile脚本是:

setup:
        pscp blob.txt username@hostname:/folder/

我启动命令提示符,进入 blob.txt 和 makefile 所在的文件夹,然后键入:

make setup

结果是:

pscp blob.txt username@hostname:/folder/
process_begin: CreateProcess(NULL, pscp blob.txt username@hostname:/folder/, ...) failed.
make (e=2): The system cannot find the file specified.
make: *** [setup] Error 2

在 #fail ... 而如果我直接在命令提示符中输入命令:

pscp blob.txt username@hostname:/folder/

它有效......我真的很想知道为什么。

4

9 回答 9

19

错误

process_begin: CreateProcess(NULL, pscp blob.txt username@hostname:/folder/, ...) failed.
make (e=2): The system cannot find the file specified.

几乎可以肯定抱怨 Windows 找不到pscp.

这几乎可以肯定是因为当 make 生成 shell/控制台时%PATH%(或其他)的值与手动打开它时不同。

比较这些值以确认这一点。然后使用pscpmakefile 配方中的完整路径或确保PATH正确设置 的值以供make使用。

于 2015-11-12T15:30:23.797 回答
12

我知道这是一个已经回答的老问题,但我想我会和我的经验为任何仍然遇到这个问题的人。我得到了同样的神秘错误上校 Beauvel(虽然使用 windows MOVE 命令,而不是 pscp):

process_begin: CreateProcess(NULL, move /y foo\bar.c .\baz.c, ...) failed.
make (e=2): The system cannot find the file specified.

我们的 CI 运行相同的 Makefile 并且运行良好。原来 CI 使用的是 mingw32-make 而我使用的是 GNU make。卸载 GNU make(作为不相关的批量包的一部分安装)并将 mingw32-make 别名为“make”可以完美地工作。

于 2018-05-03T10:26:19.953 回答
11

我不想从 PATH 变量中删除 GIT 的 bin 文件夹(我使用的是 Windows 机器),因为我经常使用它。所以我寻找了一种解决方法,这里是:

也将目录添加<git-installation-directory>/usr/bin到您的 PATH 变量中。这基本上将“GIT bash”附带的其余类似 linux 的命令添加到您的环境中。应用此功能后,我的 makefile 再次正常运行。:)

如果您对 make 调用的 shell 感到好奇,只需$(info $(SHELL))在 makefile 的开头添加即可。运行 make 后,被调用的 shell 的路径/名称会立即打印到控制台。

于 2017-10-18T18:19:25.327 回答
9

就我而言,我的 git\bin%PATH%包含 bash.exe 和 sh.exe。从为我工作的工作中
移除。%GIT_HOME%\binPATH

于 2016-03-10T20:53:11.397 回答
8

@user3869623 的解决方案对我有用。我想分享一些我的细节来完成这张照片。

我的makefile包含以下目标:

clean:
    @echo '$(OS)'
ifeq ($(OS),Windows_NT)
    del /s *.o *.d *.elf *.map *.log
endif

当我运行时make clean,我看到这个错误:

在此处输入图像描述

由于它说出现了问题echo,所以我将我的 makefile 目标更改为以下:

clean:

ifeq ($(OS),Windows_NT)
    del /s *.o *.d *.elf *.map *.log
endif

这一次,make clean给了我这个错误:

在此处输入图像描述

我很惊讶看到bash这里,因为我在 Windows 命令行中工作。

然后我检查了我的%PATH%,我看到了这个条目:

C:\DevTools\Git\bin

在那条路上有一个bash.exesh.exe。所以我删除了这个条目,它现在工作正常。

但我仍然不知道为什么 BASH 会参与其中???

加 1

至于为什么会C:\DevTools\Git\bin出现在我的 中%PATH%,因为我使用的是 Sublime,它总是要求我提供 Git 二进制文件:

在此处输入图像描述

于 2016-08-23T03:12:36.693 回答
5

以 user3869623 的响应为基础。

在我的情况下,我的 %PATH% 中有 git\bin,其中包含 bash.exe 和 sh.exe .. 从 PATH 中删除 %GIT_HOME%\bin 对我有用

虽然此建议可能允许make运行,但它可能会导致 git 出现问题,尤其是当 makefile 正在从 git 存储库安装软件时。

更好的解决方案是简单地更改%GIT_HOME%\bin%GIT_HOME%\cmd

于 2018-10-19T13:08:21.383 回答
0

我最近遇到了这个问题,这个问题是我搜索的热门问题之一。

这里的其他答案都没有帮助我。对我来说,解决方法是将二进制名称放在引号中:

setup:
        "pscp" blob.txt username@hostname:/folder/
        -"pscp" blob.txt username@hostname:/folder/ # Failure is OK, `-` in front
于 2022-01-26T23:49:13.273 回答
0

我有同样的问题,这个线程真的帮助我解决了它。就我而言,由于 git 和 mingw64,make 和通过我的路径可见的 sh.exe 之间存在冲突。为了在不破坏 Git 的情况下解决我的问题,我将这些行添加到调用 make 的批处理文件的顶部:

set path=%path:git\bin=;%
set path=%path:mingw64\bin=;%
set path=%path:usr\bin=;%

这仅针对该实例隐藏了额外的 sh.exe 实例。

于 2019-12-12T19:25:43.407 回答
0

对于那些尝试从中删除 git bin 文件夹PATH但对他们不起作用的人,请在PATH变量中搜索包含bash.exe.

就我而言,我发现了一个链接到 cygwin bin 文件夹的变量C:\cygwin64\bin,将其删除并且它起作用了。

于 2018-04-05T14:02:55.880 回答