2013-08-06 238 views
0

我想在我的生成文件中运行命令perl -MConfig -e 'print $Config{archlib}'并使用它返回的位置在我的LDFLAGS中。谁能帮我。我试着用$(shell ..)不同的方式,但它没有工作如何从makefile运行Perl命令

我想要做这样的事情

PERLPATH = $(shell 'perl -MConfig -e "print $Config{archlib}"') 
LDFLAGS += -L/usr/lib64/perl5/CORE 

谢谢!

+0

'$配置{archlib}'应该已经可用在makefile var'$ ARCHLIB'或类似 – ikegami

回答

6

在Makefile中,如果你不想让make来解释它们,你必须使用双美元符号。不过,避免使用双引号,因为shell会尝试扩展变量。

PERLPATH = $(shell perl -MConfig -e 'print $$Config{archlib}') 
+0

谢谢@choroba它为我工作。我用它像这样LDFLAGS + = -L./../../build -L $(PERLPATH)/ CORE – PMat

+0

有一个问题,为什么我需要使用$(PERLPATH)而不是$ PERLPATH。你能解释一下这个区别吗? – PMat

+0

@newguy:这是Makefile语法。 – choroba

3

应指定由意思它没有工作。在提问时,您应始终提供您运行的确切命令以及生成的确切错误。

但是,调用shell的问题在于您引用了整个命令。你应该把你想要直接运行的命令,就像你将它输入到shell提示符一样。这意味着您需要在shell脚本中使用单引号,或者从shell中转义$。那么你需要从制造中逃脱$,通过加倍。基本上,您应该在shell提示符下正确运行命令,然后简单地将该字符串剪切并粘贴到shell函数中。然后将$的每个实例更改为$$以使其脱离make。

而且你应该(为了提高效率)使用:=代替:

PERLPATH := $(shell perl -MConfig -e 'print $$Config{archlib}') 

当然要使用此路径变量:

LDFLAGS += -L$(PERLPATH)/CORE