Расшифровывая ваш шестнадцатеричный дамп, мы обнаруживаем, что в начале строки компилятора вместо табуляции есть 4 пробела.
0000050 6d20 6c79 6269 682e 200a 2020 6720 2b2b
^^ ^^^^ ^^
Четыре шестнадцатеричных числа 20 здесь являются ориентировочными.Полный make-файл:
#lab1.make -- this is a comment line, ignored by make utility
main.o : main.cpp mylib.h
g++ -c main.cpp
#above, we are saying that lab1.out depends on main1.o, and mylib.o.
#to create lab1.out, the g++ command shown on the next line is give
Командные строки в make-файле должны начинаться с явной вкладки.(Это одна из основных ошибок с make-файлами. У меня до сих пор не было хорошего объяснения того, почему вместо разрешения пробелов что-то может сломаться, но история говорит, что проблема была обнаружена очень рано в истории make
, но это не моглоне может быть исправлено из-за существующей кодовой базы. И я до сих пор не понимаю, как изменение разрешающих пробелов, а также табуляции в начале командной строки могло бы что-то сломать.)
Чтобы исправить, повернитеВыключите режим «развернуть вкладки» в vim
:
:set noet
и убедитесь, что в начале строки действительно есть вкладка.Или убедитесь, что vim
чувствителен к синтаксису (поэтому он не заменяет табуляции пробелами в make-файлах).
Обратите внимание, что комментарий "выше ..." ошибочен.Вы ничего не говорите о lab1.out
в этом make-файле и ничего не говорите о mylib.o
.Мы предполагаем, что это потому, что ваш полный make-файл упоминает об этом, и вы подрезали свой make-файл, чтобы воспроизвести проблему, но не обрезали его в максимально возможной степени.
Также стоит научиться использовать макросывстроенный в make
;на самом деле, лучше не указывать команду, потому что make
знает, как создать файл .o
из файла .cpp
.Вы могли бы просто написать:
main.o: mylib.h