Сделать: синтаксическая ошибка рядом с неожиданным токеном `--initialization'

Я пытаюсь написать «если» в директиве определения в одном из наших make-файлов. На самом деле я пытаюсь проверить платформу и продолжить настройку среды.

define templ_32
mkdir -p $(@D)
if [ "$(PLAT)" = "x86_64" ]; then env PERLLIB=$(EXTLIBS)/$(PLAT32)/lib/perl5/site_perl/5.10.0 --template $<; fi
if [ "$(PLAT)" = "aarch64" ]; then env PERLLIB=$(EXTLIBS)/$(PLAT32)/lib/perl5/site_perl/5.8.0 --template $<; fi 
endef

Я использую указанную выше директиву определения в одном из моих целевых рецептов следующим образом.

some/%.c: test/tmpl-%.c $(NEW_DATA32)
    $(templ_32) --initialization $(NEW_DATA32)

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

/bin/sh: -c: line 0: syntax error near unexpected token `--initialization'

А также из журнала я вижу все условие «если» следующим образом.

if [ "aarch64" = "x86_64" ]; then env PERLLIB=$(EXTLIBS)/$(PLAT32)/lib/perl5/site_perl/5.8.0 --template /test/deploy/tmpl-kt.c ; fi --initialization /work/deploy/test.pl 

Из моего журнала успеха, в котором нет условных утверждений «если», я вижу только

env PERLLIB=$(EXTLIBS)/$(PLAT32)/lib/perl5/site_perl/5.8.0 --template /test/deploy/tmpl-kt.c --initialization /work/deploy/test.pl

Я не хочу получать проверки «если» вместе с командой «env». Меня интересует только

env PERLLIB=$(EXTLIBS)/$(PLAT32)/lib/perl5/site_perl/5.8.0 --template  

Как я могу решить эту проблему?


person jerry    schedule 14.06.2018    source источник


Ответы (2)


Вы можете использовать условные операторы make вместо операторов оболочки if:

ifeq ($(PLAT),x86_64)
PERLVERSION = 5.10.0
else ifeq ($(PLAT),aarch64)
PERLVERSION = 5.8.0
else
$(error "Unknown arhictecture: $(PLAT)")
endif

А потом:

PERLLIB = $(EXTLIBS)/$(PLAT32)/lib/perl5/site_perl/$(PERLVERSION)

some/%.c: test/tmpl-%.c $(NEW_DATA32)
    mkdir -p $(@D); \
    env PERLLIB=$(PERLLIB) --template $< --initialization $(NEW_DATA32)
person Renaud Pacalet    schedule 14.06.2018
comment
Тк.. Это помогает :) - person jerry; 14.06.2018

Для этого вы должны просто использовать сконструированные имена макросов. Например:

PLATFORMS := x86_64 aarch64

$(or $(filter $(PLAT),$(PLATFORMS)),$(error Unknown architecture: $(PLAT)))

x86_64_PERLVER := 5.10.0
aarch64_PERLVER := 5.8.0

PERLLIB = $(EXTLIBS)/$(PLAT32)/lib/perl5/site_perl/$($(PLAT)_PERLVER)

Подробнее об этом здесь.

person MadScientist    schedule 14.06.2018