2014-04-03 70 views
0

我是Makefiles的新手,對Makefiles中的變量有疑問。基於其他變量的Makefile新變量

讓說,我有

dirs := $(shell PERL5OPT="" get-list.pl) 

其中, get-list.pl說回報ABCD

現在我想提出一些新的變量dirs_a,dirs_b,dirs_c等

我目前如何做這件事是:

dirs := $(shell PERL5OPT="" get-list.pl) 

dirs_$(var) := $(shell PERL%OPT="" some-other-perl-file.pl $(var)) 

define new-var 
$(foreach var,$(dirs),$(dirs_$(var))) 
endef 

final-target: 
    $(new-var) 

這沒有t似乎工作,沒有參數傳遞給some-other-perl-file.pl。有人能指出我做錯了什麼嗎?

+0

所以,你要創建一個包含所有迪爾斯或一個一個變量每個目標變量? –

+0

我想爲每個目錄創建一個變量。基本上我需要每個目錄1個變量,所以我創建了不同的變量,因爲我不確定我們可以在Makefile中使用類似於數組的東西而不是不同的變量。 – Rndm

回答

0
_dirs := $(shell PERL5OPT="" get-list.pl) 
dirs=$(_dirs:%=dir_%) 

這應該解決它。

它將使:

ABCD

dir_a dir_b dir_c dir_d

+0

我不知道我是否正確地得到它,但我想創建新的變量dirs_a,dirs_b等,其值應該是由some-other-perl-file.pl返回的。 – Rndm

+0

dirs = $(_ dirs:%= dir_%) 有一個錯字。它應該是: dirs = $(_ dirs:%= dirs_%) 基本上,該行所做的是迭代_dirs中的每個元素,並使用規則% - > dirs_%轉換該元素。其中%是之前的元素。所以'a'會變成'dirs_a'。 –

+0

好的,謝謝澄清,但那不是我正在尋找。 – Rndm