Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从makefile运行Perl命令_Perl_Makefile - Fatal编程技术网

如何从makefile运行Perl命令

如何从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解释它们,则必

我想在我的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
解释它们,则必须使用双美元符号。不过,避免使用双引号,因为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
或类似的地方提供了