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
, я вижу эту ошибку:
Поскольку он говорит, что что-то пошло не так с 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.exe
и sh.exe
в этом пути. Поэтому я удалил эту запись, и теперь она отлично работает.
НО Я ЕЩЕ НЕ ЗНАЮ, ПОЧЕМУ БЫТЬ В ЭТО?
ДОБАВИТЬ 1
Что касается того, почему C:\DevTools\Git\bin
появляется в моем %PATH%
, потому что я использую Sublime, и он всегда запрашивает у меня двоичные файлы Git:
Ответ 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.