Почему я получаю Makefile: 8: *** отсутствует разделитель. Остановить [дублировать]

См. этот пример: https://jsfiddle.net/pqhdce2L/

function b64toBlob(b64Data, contentType, sliceSize) {
  contentType = contentType || '';
  sliceSize = sliceSize || 512;

  var byteCharacters = atob(b64Data);
  var byteArrays = [];

  for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
    var slice = byteCharacters.slice(offset, offset + sliceSize);

    var byteNumbers = new Array(slice.length);
    for (var i = 0; i < slice.length; i++) {
      byteNumbers[i] = slice.charCodeAt(i);
    }

    var byteArray = new Uint8Array(byteNumbers);

    byteArrays.push(byteArray);
  }
    
  var blob = new Blob(byteArrays, {type: contentType});
  return blob;
}


var contentType = 'image/png';
var b64Data = Your Base64 encode;

var blob = b64toBlob(b64Data, contentType);
var blobUrl = URL.createObjectURL(blob);

var img = document.createElement('img');
img.src = blobUrl;
document.body.appendChild(img);

244
задан Greg 5 June 2013 в 06:20
поделиться

7 ответов

makefile имеет очень тупое отношение к вкладкам, все действия каждого правила идентифицируются с помощью вкладок ...... и No 4 пробелов не делают вкладку, только вкладка делает вкладку ...

, чтобы проверить, что я использую команду cat -e -t -v makefile_name

, она показывает, что наличие вкладок с символами ^ I и окончания строк с помощью $ оба являются жизненно важными, чтобы гарантировать, что зависимости заканчиваются должным образом, а вкладки отмечают действие для правил, поэтому что они легко идентифицируются с помощью утилиты make .....

example:

Kaizen ~/so_test $ cat -e -t -v  mk.t
all:ll$      ## here the $ is end of line ...                   
$
ll:ll.c   $
^Igcc  -c  -Wall -Werror -02 c.c ll.c  -o  ll  $@  $<$ 
## the ^I above means a tab was there before the action part, so this line is ok .
 $
clean :$
   \rm -fr ll$
## see here there is no ^I which means , tab is not present .... 
## in this case you need to open the file again and edit/ensure a tab 
## starts the action part

надеюсь, что это поможет !!

514
ответ дан xaxxon 19 August 2018 в 05:44
поделиться
  • 1
    «makefile имеет очень тупое отношение к вкладкам, все действия каждого правила идентифицируются с помощью вкладок ...... и № 4 пробелов не делают вкладку, только вкладка делает вкладку», это очень помогло – oiyio 13 April 2014 в 12:41
  • 2
    & quot; cat -e -t -v makefile_name & quot; это лучшее. Когда-либо. Я продолжал смотреть на экран, видя, что выглядит как вкладка, полностью отсутствует, что это ОДНА ЛИНИЯ во всем файле, который использовал пробелы вместо жесткой вкладки. – arinmorf 1 February 2015 в 16:44
  • 3
    Огромное спасибо! Я составляю исходный код большого проекта. Введенные некоторые строки в makefile из учебника, и это не сработало. Только после удаления пробелов и установки Tab вместо этого! – rzaaeeff 8 August 2015 в 07:12
  • 4
    При копировании / вставке из одного файла makefile в другой с помощью редактора vi (или vim) убедитесь, что вы случайно не захватили строку ~ (тильда), указывающую конец файла. Настоящий ~ выглядит как маркер vi и вызывает «*** отсутствующий разделитель». Stop & Quot. ошибка. Это может показаться очевидным, но когда это случается случайно, это далеко не очевидно. Дополнительную информацию см. В комментариях моего блога . – Scott 26 February 2016 в 02:11
  • 5
    -v для команды cat здесь избыточно, потому что -e означает -vE и -t означает -vT. – zack 25 April 2016 в 10:38

В коде VS просто нажмите «Пробел: 4» в правом углу и измените его на вкладку при редактировании Makefile.

15
ответ дан alanwsx 19 August 2018 в 05:44
поделиться
  • 1
    Я даже не заметил этого там - спасибо за эту информацию. Раньше я использовал regex find-replace, но это намного лучше. – Peanut 22 March 2017 в 15:52
  • 2
    VS Code признал, что мой файл «common.mk», извлеченный из файла «Makefile» без суффикса, был файлом make и правильно его подсвечивал, но тихо начал отступать от пробелов вместо вкладок. – Francis Norton 8 January 2018 в 19:28
  • 3
    Спасибо за помощь! Я определенно не заметил, что в этом нижнем углу были настройки вкладки. – se_brandon 17 August 2018 в 13:15

Если кто-то из вас использует продукт Intellij, решение для этого следующее:

  1. Перейдите в раздел «Настройки»> «Редактор»> «Стиль кода»
  2. здесь для выбора типа файла, связанного с вашей проблемой. Но, скорее всего, вам нужно выбрать Other File Types.
  3. В открывшейся вкладке отметьте флажок для Use tab character и будьте осторожны, значения Tab size и Indent должны быть 4.
0
ответ дан Bogdan Alexandru Militaru 19 August 2018 в 05:44
поделиться

Вы всегда должны писать команду после «вкладки», а не пробела.

Это относится к строке «gcc» (строка № 4) в вашем случае. Вам нужно вставить вкладку перед gcc.

Также замените\rm -fr ll на "rm -fr ll". Вставьте вкладки еще перед этой командой

17
ответ дан Denny Mathew 19 August 2018 в 05:44
поделиться
  • 1
    Чтобы быть предельно ясным, должен быть жесткий символ TAB в качестве первого символа в каждой строке логического рецепта. После TAB вы можете добавить любые пробелы, которые вы хотите. – MadScientist 5 June 2013 в 13:47
  • 2
    должно ли табличное пространство быть равно 2 или 4? в /.vimrc установить tabstop = 2 или 4? – Rahul Reddy 5 June 2013 в 18:52
  • 3
    @RahulReddy, как редактор отображает вкладку, не имеет никакого отношения к тому, есть или нет символ табуляции в конфигурации. – xaxxon 14 May 2018 в 11:14

Это потому, что табуляция заменяется пробелами. Чтобы отключить эту функцию, перейдите к

gedit-> edit-> preferens-> editor

и удалите проверку на

«замените закладку пробелом»

0
ответ дан Mansuro 19 August 2018 в 05:44
поделиться
  • 1
    Где он говорит, что он использует gedit? – Kusalananda 11 July 2016 в 05:33

Его довольно старый вопрос, но все же я хотел бы сказать еще об одном варианте с помощью редактора vi/vim для визуализации вкладок. Если у вас установлен vi/vim, откройте Makefile (например, vim Makefile) и введите :set list. Это покажет количество вкладок, вставленных, как показано ниже,

 %-linux: force$
^I@if [ "$(GCC_VERSION)" = "2.96" ] ; then \$
^I^Iecho ===== Generating build tree for legacy $@ architecture =====; \$
^I^I$(CONFIGURE) $(CWD) $@ legacy; \$
^Ielse \$
^I^Iecho ===== Generating build tree for $@ architecture =====; \$
^I^I$(CONFIGURE) $(CWD) $@; \$
^Ifi$
^Icd build-$@;make$
2
ответ дан Panch 19 August 2018 в 05:44
поделиться

Ключевым моментом было «HARD TAB» 1. Убедитесь, что вы использовали TAB вместо пробела. 2. Проверьте свой .vimrc на «set tabstop = X»

3
ответ дан wlsherica 19 August 2018 в 05:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: