Тот факт, что 'main.o'$'\r'
появляется в вашем выводе, очень показателен.Это говорит о том, что в вашем скрипте есть дополнительный символ возврата каретки в конце строки rm main.o
.Этот символ невидим для вас, но не для bash, поэтому, даже если вам кажется, что вы написали команду для удаления файла main.o
, bash видит команду для удаления файла main.o\r
(где стоит \r
)для невидимого символа возврата каретки), и, конечно, нет файла с таким именем.
Если в конце ваших других строк есть возврат каретки, это, вероятно, также объяснит другие сообщения об ошибках, которые вывидя.Например, ’; did you mean ‘-fPIC’?
, вероятно, исходит от GCC, пытающегося отобразить сообщение, похожее на это
invalid option ‘-fPIC\r’; did you mean ‘-fPIC’?
, но, поскольку GCC фактически перемещает курсор назад к началу строки, когда появляется \r
,вторая половина сообщения перезаписывает первую половину.И /usr/bin/ld: cannot find -lglfw
, вероятно, на самом деле /usr/bin/ld: cannot find -lglfw\r
, где возврат каретки в конце невидим.
Это произошло бы, если вы написали этот файл сценария в текстовом редакторе, который использует окончания строк в стиле Windows.Чтобы запустить его в bash, вам нужно преобразовать окончания строк в Unix-стиле, что означает удаление всех символов возврата каретки.Как вы это сделаете, зависит от того, какие инструменты у вас есть.