Makefile error make (e=2): The system cannot find the file specified

旧街凉风 提交于 2019-11-27 02:11:37

问题


I am using a makefile in windows to push some files on a Unix server (here a text file "blob.txt" in the same folder of my makefile). My makefile script is:

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

I start a command prompt, go in the folder where blob.txt and the makefile are present and type:

make setup

Which results in:

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

In a #fail ... whereas if I enter directly the command in the command prompt:

pscp blob.txt username@hostname:/folder/

It works ... I really wonder why.


回答1:


The error

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

is almost certainly complaining that Windows cannot find pscp.

This is almost certainly because the value of %PATH% (or whatever) is different when make spawns a shell/console then when you have it open manually.

Compare the values to confirm that. Then either use the full path to pscp in the makefile recipe or ensure that the value of PATH is set correctly for make's usage.




回答2:


In my case i had git\bin in my %PATH% which contains bash.exe and sh.exe.. Removing %GIT_HOME%\bin from the PATH worked for me




回答3:


@user3869623's solution works for me. I'd like to share some details of mine to complete the picture.

My makefile contains below target:

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

When I run make clean, I see this error:

Since it says something went wrong with echo, so I change my makefile target to below:

clean:

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

This time, make clean gives me this error:

I am surprised to see bash here since I am working in Windows command line.

Then I checked my %PATH%, I see this entry:

C:\DevTools\Git\bin

There's a bash.exe and sh.exe in that path. So I removed this entry, and it works fine now.

BUT I STILL DON'T KNOW WHY BASH GET INTO THIS???

ADD 1

As to why the C:\DevTools\Git\bin shows up in my %PATH%, because I am using Sublime and it always asks me for the Git binaries:




回答4:


I know this is an old question that has been answered, but thought I'd and my experiences for anyone still running into this. I was getting the same cryptic error Colonel Beauvel (though with the windows MOVE command, not pscp):

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

Our CI was running the same Makefile and working perfectly. Turns out CI was using mingw32-make and I was using GNU make. Uninstalling GNU make (which got installed as part of an unrelated bulk package) and aliasing mingw32-make to 'make' works perfectly.




回答5:


To build on user3869623's response.

In my case i had git\bin in my %PATH% which contains bash.exe and sh.exe.. Removing %GIT_HOME%\bin from the PATH worked for me

While this recommendation may allow make to run, it will likely cause issues for git, especially if the makefile is installing software from a git repository.

A better solution is to simply change %GIT_HOME%\bin to %GIT_HOME%\cmd




回答6:


I did't want to remove GIT's bin folder form the PATH variable (I am using a Windows machine), as I use it quite often. So I looked for a work around. And here it is:

Add the <git-installation-directory>/usr/bin directory to your PATH variable too. This basically adds the rest of the linux-like commands that come with the "GIT bash" to your environment. After applying this, my makefiles ran normally again. :)

If you are curious about what shell is being invoked by make, just add $(info $(SHELL)) at the beginning of your makefile. The path/name of the shell being invoked is printed to the console as soon as you run make.




回答7:


For those who tried removing the git bin folder from PATH and it didn't work for them, search your PATH variables for any paths containing bash.exe.

In my case I found a variable linking to cygwin bin folder C:\cygwin64\bin, removed it and it worked.



来源:https://stackoverflow.com/questions/33674973/makefile-error-make-e-2-the-system-cannot-find-the-file-specified

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!