Make:语法错误接近意外令牌` - 初始化'

时间:2018-06-14 06:35:58

标签: makefile gnu-make

我正在尝试在我们的一个make文件中写入'if'check in define directive。 实际上我正在尝试检查平台并继续进行环境设置。

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

我在我的一个目标配方中使用了上面的define指令,如下所示。

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

当我使用上述更改运行构建时。我收到了错误:

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

而且从日志中我看到整个'if'条件如下。

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 

从我的成功日志中我没有看到'if'语句,我只能看到

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

我不想在'env'命令中获得'if'检查。我只对

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

如何解决此问题?

2 个答案:

答案 0 :(得分:0)

您可以使用make conditionals而不是shell 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)

答案 1 :(得分:0)

您应该为此使用构造的宏名称。例如:

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)

有关此here的详情。