如何从makefile运行Perl命令
我想在我的makefile中运行命令如何从makefile运行Perl命令,perl,makefile,Perl,Makefile,我想在我的makefile中运行命令perl-MConfig-e'print$Config{archlib},并使用它在我的LDFLAGS中返回的位置。有人能帮我吗。我尝试了使用$(shell..)的不同方法,但没有成功 我想做这样的事情 PERLPATH = $(shell 'perl -MConfig -e "print $Config{archlib}"') LDFLAGS += -L/usr/lib64/perl5/CORE 谢谢 在Makefile中,如果不希望make解释它们,则必
perl-MConfig-e'print$Config{archlib}
,并使用它在我的LDFLAGS
中返回的位置。有人能帮我吗。我尝试了使用$(shell..)
的不同方法,但没有成功
我想做这样的事情
PERLPATH = $(shell 'perl -MConfig -e "print $Config{archlib}"')
LDFLAGS += -L/usr/lib64/perl5/CORE
谢谢 在Makefile中,如果不希望
make
解释它们,则必须使用双美元符号。不过,避免使用双引号,因为shell会尝试展开变量
PERLPATH = $(shell perl -MConfig -e 'print $$Config{archlib}')
你应该具体说明你所说的“它不起作用”是什么意思。提问时,您应该始终提供您运行的确切命令和生成的确切错误 但是,调用
shell
的问题是引用了整个命令。您应该直接将要运行的命令放入shell提示符中,就像在shell提示符中键入命令一样。这意味着您需要在shell脚本周围使用单引号,或者从shell中转义$
。然后,您需要通过加倍make来从make中转义$
。基本上,您应该让命令在shell提示符下正确运行,然后简单地将该字符串剪切并粘贴到shell
函数中。然后将$
的每个实例更改为$$
,以将其从make中转义
此外,为了提高效率,您应该使用:=
:
PERLPATH := $(shell perl -MConfig -e 'print $$Config{archlib}')
当然,您要使用这个path变量:
LDFLAGS += -L$(PERLPATH)/CORE
谢谢@choroba这对我很有效。我这样使用它LDFLAGS+=-L./../../build-L$(PERLPATH)/core一个问题:为什么我需要使用$(PERLPATH)而不仅仅是$PERLPATH。你能解释一下区别吗?@newguy:这就是Makefile语法。好的。我还有一个错误,就是我在做这个INCS+=-i$HOME/include-i/usr/include。我想我得把它改成$(HOME)。@newguy:Use
$(HOME)
或$$HOME
$Config{archlib}
应该已经在makefile var$archlib
或类似的地方提供了