Make e 2 не удается найти указанный файл

Обновлено: 05.07.2024

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

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

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

ОТВЕТЫ

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

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

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

enter image description here

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

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

enter image description here

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

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

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

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

ДОБАВИТЬ 1

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

enter image description here

Ответ 4

Я знаю, что это старый вопрос, на который был дан ответ, но я подумал, что я и мой опыт для тех, кто все еще сталкивается с этим. Я получал ту же загадочную ошибку полковника Beauvel (хотя с командой Windows MOVE, а не pscp):

Наш 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 это отличное решение, если не лучшее решение здесь.

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

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

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

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

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

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

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

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

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

enter image description here

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

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

enter image description here

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

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

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

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

ДОБАВИТЬ 1

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

enter image description here

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

ответил(а) 2016-03-10T23:53:00+03:00 5 лет, 8 месяцев назад

Я знаю, что это старый вопрос, на который был дан ответ, но я подумал, что я и мой опыт для тех, кто все еще сталкивается с этим. Я получал ту же загадочную ошибку полковника Beauvel (хотя с командой Windows MOVE, а не pscp):

Наш CI работал с тем же Makefile и отлично работал. Оказывается, CI использовал mingw32-make, и я использовал GNU make. Деинсталляция GNU make (который был установлен как часть несвязанного пакетного пакета) и aliasing mingw32-make для "make" работает отлично.

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

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

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

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

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


Я запускаю командную строку, захожу в папку, в которой находятся blob.txt и make-файл, и набираю:

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

  • 2 Проверьте значение (или эквивалентное) при запуске из и при запуске вручную. Держу пари, они отличаются включением пути до .
  • Это совершенно верно и решает вопрос! Вы можете опубликовать это как ответ, если хотите!
  • Это только начало происходить и со мной. Процесс make больше не может "видеть" определенные файлы в моей системе. Я установил GNU make с Chocolatey, и он работал безупречно в течение многих лет. Совершенно неожиданно сегодня такие файлы, как bash.exe и wsl.exe, скрыты от процесса make.

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

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

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

  • arf Прошу прощения, но на самом деле это не решает ошибку . Я создал команду в моем make-файле, и она содержит путь к папке, в которой находится pscp .
  • 1 расширяет значение переменной make . Попробуйте вместо этого использовать переменную пути оболочки. или или что угодно.

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

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

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

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

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

Я знаю, что это старый вопрос, на который был дан ответ, но подумал, что я и мой опыт для тех, кто все еще сталкивается с этим. Я получал ту же загадочную ошибку, полковник Бовель (правда, с командой Windows MOVE, а не с pscp):

Наш CI запускал тот же Makefile и работал отлично. Оказалось, что CI использовал mingw32-make, а я использовал GNU make. Удаление GNU make (которое было установлено как часть несвязанного массового пакета) и присвоение псевдонима mingw32-make для make работает отлично.

Решение @ user3869623 работает для меня. Для полноты картины я хотел бы поделиться некоторыми своими подробностями.

Мой make-файл содержит цель ниже:

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


Поскольку в нем говорится, что что-то пошло не так с , я меняю цель make-файла на ниже:

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


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

Потом проверил свой , вижу такую ​​запись:

На этом пути есть и . Я удалил эту запись, и теперь она работает нормально.

НО Я ВСЕ ЕЩЕ НЕ ЗНАЮ, ПОЧЕМУ BASH ЗАНЯТ В ЭТО .

ДОБАВИТЬ 1

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


  • Некоторые версии смотрят на вашу переменную , чтобы решить, какую оболочку запустить. У других, вероятно, есть оболочка, совместимая с , жестко запрограммированная во избежание поломки Makefile для пользователей с забавными нестандартными оболочками. Для протокола, какой вы используете?
  • @tripleee Спасибо за ваш комментарий. Я использую для окон.

Чтобы основываться на ответе пользователя3869623.

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

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

Лучшее решение - просто заменить на .

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

В моем случае я нашел переменную, ссылающуюся на папку cygwin bin , удалил ее, и она сработала.

У меня есть docker-compose.yaml файл, который выглядит следующим образом:

И мой Makefile выглядит так

Когда я запускаю это из командной строки GitBash:

Я получаю следующий результат

docker-compose run terraform init
process_begin: Ошибка CreateProcess (NULL, docker-compose run terraform init, . ).
make (e = 2): система не может найти указанный файл.
make: *** [init] Ошибка 2

Пожалуйста, дайте мне знать, если я могу предоставить больше информации

Обновить

Я подтвердил, что:

  • docker-compose установлен
  • docker-compose.exe существует в моей переменной окружения PATH (см. ниже)

Моя переменная окружения PATH:

enter image description here

Обновление 2

Если я изменю make-файл, чтобы он явно указывал путь к файлу docker-compose.exe , он работает:

Обновление 3 - решение

Так что мой полный Makefile на самом деле выглядел так:

Запуск make .env создает .env file , который включает переменную PATH env

Удаление строки PATH из этого файла решит это для меня :)

2 ответа

Если ваш Makefile каким-то образом манипулирует переменной PATH , так что каталог, в котором установлен docker-compose , больше не находится в нем, это может вызвать симптомы такого рода.

Для устранения неполадок попробуйте добавить

(с отступом на вкладке, конечно) непосредственно перед ошибочной командой, и проверьте, подтверждает ли результат ваши ожидания.

(В этом контексте знак доллара необходимо удвоить, чтобы передать буквальный знак доллара из make в базовую оболочку.)

Это означает, что docker-compose не найден при выполнении docker-compose run terraform init в Makefile.

Если вы не выполните make , просто docker-compose , вы также не сможете найти docker-compose .

Б) Если вы установили docker-compose , вам нужно знать, где вы его устанавливаете. Для моего сайта я установил его в: C:\Program Files\Docker\Docker\Resources\bin , поэтому перед выполнением make init я добавлю это в PATH:

Кроме того, если вы хотите окончательно добавить путь docker-compose в env, вы можете сослаться на это, чтобы сделать это.

Читайте также: