Make: непредвиденная ошибка токена - PullRequest
0 голосов
/ 12 июня 2018

Я получаю следующую ошибку при создании моего кода.

/bin/sh: -c: line 0: syntax error near unexpected token `testk,x86_64'
/bin/sh: -c: line 0: `ifeq (testk,x86_64)'

Код:

define temp
    mkdir -p $(@D)
ifeq ($(MACH),x86_64)
            env PERLLIB=/usr/lib/perl5/site_perl/5.10.0 --test $< 
else
            env PERLLIB=/usr/ex-lib/perl5/site_perl/5.10.0 --test $<
endif 
endef

Я обнаружил, что нам нужно удалить отступ перед оператором if в файлах make.Я сделал то же самое и все еще сталкиваюсь с проблемой.Не могли бы вы исправить меня, если я делаю что-то не так.

Я использую 'temp' следующим образом.

$(TGT64)/$(SETUP): $(TGT64)/$(GEN_K)_gen
     $(temp)

Здесь я пытаюсь проверить платформу и настроить среду соответствующим образом.,в 'define temp' я проверяю содержимое переменной MACH, которая имеет информацию о платформе.

Я играю с кодом и делаю следующие изменения.

define temp
mkdir -p $(@D)
@ifeq ($(MACH),x86_64); then env PERLLIB=/usr/lib/perl5/site_perl/5.10.0 $<; \
@else \ 
@env PERLLIB=/usr/ex-lib/perl5/site_perl/5.10.0 $<; \
@fi
endef

На этот раз я сталкиваюсь.
/ bin / sh: -c: строка 1: синтаксическая ошибка: неожиданное завершение файла.

1 Ответ

0 голосов
/ 12 июня 2018

Прежде чем мы сможем помочь вам, вы должны показать нам, как вы используете эту переменную temp, которую вы определили.Просто показ содержимого этой переменной не поможет.

Я ожидаю, что вы пытаетесь использовать переменную внутри рецепта, например:

foo:
        $(temp)

Вы не можете сделатьчто: содержимое рецепта должно быть сценарием оболочки;рецепты передаются в оболочку для выполнения.Содержимое temp, как вы его определили, содержит конструкции makefile, о которых оболочка ничего не знает, следовательно, ваша синтаксическая ошибка из оболочки.

Кроме того, каждая строка в рецепте передаетсяотдельная оболочка, поэтому ваша строка env FOO = bar не имеет никакого эффекта: после того, как эта строка была вызвана, оболочка закрывается и все изменения в ее среде теряются.

Вашего примера здесь недостаточно, чтобы мы порекомендовали работоспособную стратегию: вы не сказали нам, чего хотите достичь.

ETA Мой ответ выше все еще верен.Похоже, вы пытались преобразовать переменную в синтаксис сценария оболочки для оператора if, но не завершили работу: ifeq это синтаксис make-файла, а не синтаксис оболочки.В оболочке вы должны использовать if.Как это:

@if [ '$(MACH)' = x86_64 ]; then ...

Однако, пожалуйста, перечитайте мой комментарий выше о настройке переменной среды ... рецепт, который вы здесь показали, не будет действовать вообще, даже если у него больше нет синтаксисаошибки.

...