Makefile error make (e = 2): система не может найти указанный файл

Я использую makefile в Windows, чтобы выталкивать некоторые файлы на Unix-сервере (здесь текстовый файл "blob.txt" в той же папке моего make файла). Мой скрипт makefile:

setup:
        pscp blob.txt [email protected]:/folder/

Я запустил командную строку, зайдите в папку, где есть blob.txt и makefile, и введите:

make setup

Результат:

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

В #fail... тогда как если я введу непосредственно команду в командной строке:

pscp blob.txt [email protected]:/folder/

Это работает... Я действительно удивляюсь, почему.

Ответы

Ответ 1

Ошибка

process_begin: CreateProcess(NULL, pscp blob.txt [email protected]:/folder/, ...) failed.
make (e=2): The system cannot find the file specified.

почти наверняка жалуется, что Windows не может найти pscp.

Это почти наверняка, потому что значение %PATH% (или что-то другое) отличается, когда make порождает оболочку/консоль, а затем, когда вы открываете ее вручную.

Сравните значения, чтобы подтвердить это. Тогда либо использовать полный путь к pscp в рецепте Makefile или убедитесь, что значение переменной PATH устанавливается правильно для make использования.

Ответ 2

В моем случае у меня был git\bin в моем %PATH% который содержит bash.exe и sh.exe. Удаление %GIT_HOME%\bin из PATH работало для меня

Ответ 3

@user3869623 решение работает для меня. Я хотел бы поделиться некоторыми деталями, чтобы закончить картину.

Мой файл makefile находится ниже цели:

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

Когда я запускаю make clean, я вижу эту ошибку:

enter image description here

Поскольку он говорит, что что-то пошло не так с echo, поэтому я изменяю свою цель makefile ниже:

clean:

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

На этот раз, make clean дает мне эту ошибку:

enter image description here

Я удивлен, увидев bash здесь, так как я работаю в командной строке Windows.

Затем я проверил свой %PATH%, я вижу эту запись:

C:\DevTools\Git\bin

Там bash.exe и sh.exe в этом пути. Поэтому я удалил эту запись, и теперь она отлично работает.

НО Я ЕЩЕ НЕ ЗНАЮ, ПОЧЕМУ БЫТЬ В ЭТО?

ДОБАВИТЬ 1

Что касается того, почему C:\DevTools\Git\bin появляется в моем %PATH%, потому что я использую Sublime, и он всегда запрашивает у меня двоичные файлы Git:

enter image description here

Ответ 4

Я знаю, что это старый вопрос, на который был дан ответ, но я подумал, что я и мой опыт для тех, кто все еще сталкивается с этим. Я получал ту же загадочную ошибку полковника 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 (который был установлен как часть несвязанного пакетного пакета) и aliasing mingw32-make для "make" работает отлично.

Ответ 5

Чтобы построить пользователь 3869623 ответ.

В моем случае у меня был git\bin в моем% PATH%, который содержит bash.exe и sh.exe.. Удаление% GIT_HOME%\bin из PATH мне помогло

Хотя эта рекомендация может позволить запустить make, она, вероятно, вызовет проблемы для git, особенно если make файл устанавливает программное обеспечение из репозитория git.

Лучшее решение - просто изменить %GIT_HOME%\bin на %GIT_HOME%\cmd

Ответ 6

Я не хотел удалять папку GIT bin из переменной PATH (я использую машину Windows), поскольку я использую ее довольно часто. Поэтому я искал работу. И вот он:

Добавьте <git-installation-directory>/usr/bin в свою переменную PATH. Это в основном добавляет остальные Linux-подобные команды, которые поставляются с "GIT bash" в вашу среду. После применения этого, мои make файлы снова запускались нормально. :)

Если вам интересно, какая оболочка вызывается make, просто добавьте $(info $(SHELL)) в начало вашего файла makefile. Путь/имя вызываемой оболочки печатается на консоль, как только вы запускаете make.

Ответ 7

Для тех, кто пытался удалить папку git bin из PATH и это не сработало для них, найдите переменные PATH для любых путей, содержащих bash.exe.

В моем случае я нашел переменную, C:\cygwin64\bin папкой bin cygwin C:\cygwin64\bin, удалив ее, и она сработала.

Ответ 8

Я знаю, что я супер опоздал на вечеринку, но я должен сказать, что ответ рикардо Алехоса В дополнение к Etan Reisner это отличное решение, если не лучшее решение здесь.

Это потому, что если вы используете bash.exe или какую-то версию bash через git, вы действительно должны хранить все эти программы (по крайней мере, bin) в переменной окружения PATH. Я не потерял ни одной функциональности, связанной с тем, что я делаю между Mac, Linux (дистрибутив Debian) и Windows 10.