Работаю под виндой. Частенько сталкиваюсь с таким явлением: при запуске make он пытается найти sh. Не находит и обламывается.
Почему у меня нету sh? Я не помню, что-то мне в нём когда-то не понравилось, или что-то в этом роде. То ли он слеши перепутывал, то ли находил каждый файл по нескольку раз, то ли ещё что-то. Короче, хотелось бы обойтись без него:-)
Когда это происходит с чужими мейкфайлами, где есть что-то типа if -f[]... , то всё понятно, это явная команда шелла. Но бывает что ругается на мои обычные мейк-файлы, в которых ничего подобного не используется!
Вот сегодня, скачал новый mspgcc, там make 3.81. Был 3.80. Так вот, новый ругается на следующую строчку:
Код
clean:
@$(RM) $(elffile) $(hexfile) 2>nul
пишет
Код
make: /bin/sh: Command not found
make: *** [clean] Error 127
Если убрать перенаправление вывода, для этой строки шелл становится не нужен. Но затыкается на следующей:
Код
@echo --- assembling $<...
Пишет что не найдена команда echo. Хорошо, пишу
Код
echo := cmd /C echo
,далее
@$(echo) --- assembling $<...
- упс, починилось:-) Но только до следующей строки:
Код
@$(CC) $(aflags) -o $@ $<
Там опять не найден bin/sh... Тут я уже не знал что делать, вернул прошлый мейк, всё заработало. И, что самое интересное, тот же самый (по идее) make 3.81 из сборки klen-а - шелл не запускает.
Хотелось бы понять:
- в каких случаях мейк может запустить шелл?
- от чего это зависит?
- как с этим бороться?
- независим ли мейк от шелла?
- и почему в mspgcc не положили sh.exe?

Если бы я знал, что такое электричество...