2013-08-06 144 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