При попытке установить som_pak-3.1-NAcMoS.tar.gz
файл я использовал следующие команды:
$ tar xvf som_pak-3.1-NAcMoS.tar.gz
$ cd som_pak-3.1
$ cp makefile.unix makefile
$ make
$ cd ..
$ ln -s som_pak-3.1 $NACMOS_HOME/som_pak
Но при выполнении make
команды я получаю следующую ошибку:
* отсутствует разделитель (вы имели в виду TAB вместо 8 пробелов?). Стоп.
- Кто-нибудь может сказать мне причину ошибки?
- Есть ли какие-либо пакеты должны быть включены с этим?
Ответы:
Ошибка, с которой вы столкнулись:
Означает, что
makefile
содержит пробелы вместо табуляции.make
Утилита , как известно , разборчивы об использовании Spaceвместо Tab. Таким образом, вполне вероятно, что в начале файлаmakefile
содержится Spaceраздел правил в файле.пример
Допустим, у меня есть следующие 3
Привет world.c main.c :.c
файла:Скажем, у меня есть следующее
Makefile
:Теперь мы пытаемся построить цель
Когда я запускаю его против цели
helloworld
:Выглядит знакомо?
Исправление проблемы
Вы можете исправить это, изменив Spacesдействительные Tabсимволы. Я использовал,
vim
чтобы восстановить мой файл. Просто откройте его:И затем выполните эту команду в:
ПРИМЕЧАНИЕ:
^I
это специальный символ. Ввод с ^последующим Iбудет интерпретироваться по-разному по сравнению с Ctrl+ V- Ctrl+ I.Это заменит все строки, начинающиеся с 1 или более, Spacesфактическими Tab.
Теперь, когда я перезапущу свою
helloworld
цель:Ссылки
источник
Как и предполагал другой ответ, Makefiles нужны символы табуляции, а не пробелы. У меня есть свой
.vimrc
набор для автоматической замены всех вкладок пробелами, поэтому я должен вручную установить обратную настройку в отдельных файлах Makefile. Команда,vim
которую я использую, выглядит следующим образом:источник
# vim: set noet:
Примечание. Правильный способ решения этой конкретной проблемы - исправить файл Makefile таким образом, чтобы каждая строка действия каждого рецепта имела отступ с использованием одного символа табуляции, а затем отправить исправление для него исходным разработчикам.
Это уродливый хак, который работает с последними версиями GNU
make
(если проблема в том, что Makefile последовательно использует пробелы вместо вкладок):Это установит специальную
make
переменную GNU.RECIPEPREFIX
в один пробел. Эта переменная, начиная с GNUmake
3.82 или около того (2007), управляет символом, используемым для префикса строк действия рецептов. Если переменная пуста (как по умолчанию), используются вкладки.Пример,
Пример, показывающий его использование с
>
(установка переменной внутри Makefile в этом случае):Смотрите также:
make
.источник