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

我在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中…而如果我直接在命令提示符下input命令:

 pscp blob.txt username@hostname:/folder/ 

它的作品…我真的很奇怪为什么。

Solutions Collecting From Web of "Makefile错误make(e = 2):系统找不到指定的文件"

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

错误

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

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

这几乎可以肯定,因为当产生一个外壳/控制台,然后当你手动打开时, %PATH% (或其他)的值是不同的

比较值来确认。 然后在makefile配方中使用pscp的完整路径,或者确保为make的使用正确设置了PATH的值。

@ 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给我这个错误:

在这里输入图像说明

因为我在Windows命令行工作,所以我很惊讶地看到这里的bash

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

C:\DevTools\Git\bin

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

但我仍然不知道为什么BASH进入这个?

ADD 1

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

在这里输入图像说明

我不想从PATH变量(我正在使用Windows机器)中删除GIT的bin文件夹,因为我经常使用它。 所以我找了一个工作。 这里是:

<git-installation-directory>/usr/bin目录添加到PATH变量中。 这基本上将“GIT bash”附带的其他类似linux的命令添加到您的环境中。 应用这个之后,我的makefiles再次正常运行。 🙂

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