Makefile错误make(e = 2):系统找不到指定的文件

Col*_*vel 15 windows bash putty makefile pscp

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

setup:
        pscp blob.txt username@hostname:/folder/
Run Code Online (Sandbox Code Playgroud)

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

make setup
Run Code Online (Sandbox Code Playgroud)

结果如下:

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
Run Code Online (Sandbox Code Playgroud)

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

pscp blob.txt username@hostname:/folder/
Run Code Online (Sandbox Code Playgroud)

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

Eta*_*ner 13

错误

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

几乎肯定抱怨Windows无法找到pscp.

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

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

  • 对我来说,问题是我使用的是 PowerShell 而不是 git 终端。 (3认同)
  • `@echo $(PATH)` 正在扩展 make `PATH` 变量的值。尝试改用 shell 路径变量。`@echo $$PATH` 或 `@echo %PATH%` 或其他。 (2认同)

小智 9

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

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

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

  • 我知道我参加聚会已经太晚了,但我不得不说,除了 Etan Reisner 的答案之外,Ricardo Alejos 的答案即使不是最好的解决方案,也是一个很好的解决方案。这是因为如果您通过 git 的东西使用 bash.exe 或某些版本的 bash,您确实应该将所有这些程序(至少是 bin)保留在 PATH 环境变量中。我在 Mac、Linux(debian 发行版)和 Windows 10 之间所做的任何操作都没有丢失任何功能。 (4认同)

use*_*623 6

在我的情况下,我在我的git\bin %PATH%包含bash.exe和sh.exe .. %GIT_HOME%\binPATH我的工作中删除


smw*_*dia 6

@ user3869623的解决方案适合我.我想分享一些我的细节来完成图片.

我的makefile包含以下目标:

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

当我跑make clean,我看到这个错误:

在此输入图像描述

既然它说出了问题echo,那么我将makefile目标更改为:

clean:

ifeq ($(OS),Windows_NT)
    del /s *.o *.d *.elf *.map *.log
endif
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

bash因为我在Windows命令行中工作,所以我很惊讶.

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

C:\DevTools\Git\bin

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

但我仍然不知道为什么BASH得到这个???

添加1

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

在此输入图像描述


小智 6

我知道这是一个已解决的老问题,但是我想我和我的经验对仍然遇到此问题的任何人都是如此。我收到了相同的神秘错误上校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.
Run Code Online (Sandbox Code Playgroud)

我们的CI运行相同的Makefile,并且运行良好。原来CI正在使用mingw32-make,而我正在使用GNU make。卸载GNU make(作为不相关的批量软件包的一部分安装),并将mingw32-make别名为'make'效果很好。


Jul*_*lie 5

建立在user3869623的响应上。

在我的情况下,我的%PATH%中包含git \ bin,其中包含bash.exe和sh.exe。

尽管此建议可能允许make运行,但可能会导致git出现问题,尤其是在makefile从git存储库安装软件的情况下。

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