2013-01-03 82 views
0

我想解析Makefile中的一個字符串以包含在一個.c文件中。 由於我的控制條件,在許多文件中都有縮進條目。條目的格式可能略有不同。我可以改變最初定義下游的東西,這會讓事情變得更加困難。所以這裏是我有什麼:Makefile解析一個字符串

這裏是3我可以從一個調用生成文件輸入(數字是隨機的)的例子。

ORIG1 = S12a1234A5678

ORIG2 = S123a1234A5678

ORIG3 = S123123456789

所以我很感興趣,過去的9位數字,如下將對其進行格式化。

如果輸出包含'A',則在字符串末尾的第5個數字之前插入'0',否則應該將輸出分配給另一組makefile變量,否則將抓取最後九個數字。 OUT1 = 12340A5678

OUT2 = 12340A5678

OUT3 = 123456789

更desireable如果輸出可以在生成文件被創建炮擊代替。 我試過並慘敗於sed。任何幫助將被appriciated。

+1

sed的**被**「脫殼而出」 – hd1

回答

1
targ: 
    @echo $(ORIG1) | sed '/A/s/\(.*\)\(\([0-9][^0-9]*\)\{5\}\)/\10\2/;s/.*\(\([0-9\][^0-9]*\)\{9\}\)/\1/' >> destination.c 

請注意,這個轉換髮生在一個命令中,所以它在shell中由sed處理。

可以做它的功能,沒有調用任何shell,但你真的不應該。 Make並不是爲這種解析而設計的,所以解決方案會很糟糕。

+0

這是我結束了: – user1946438

+0

要創建我的Makefile文件的標題部分使用該statment參數: OUT1 = $(殼回聲$(ORIG1 )| sed -n'/ A/y/[az]/[AZ] /; s/A/0A /; s /.* \(\([0-9 \] [^ 0-9] * \) \ {9 \} \)/ \ 1/p'); 這對我的需要是有效的,當「A」在那裏,當它不是1時,它全部爲大寫,然後將'A'改爲'0A',最後抓取變量中的最後9個字符。 – user1946438

0

我確定提問者已經在3年後繼續工作了,但如果其他人對此感興趣,可以使用模塊化方式完成任務。

hasA  = $(findstring A,$(1)) 
lastN = $(shell echo -n $(1) | tail -c $(2)) 
firstN = $(shell echo -n $(1) | head -c $(2)) 
smack0 = $(1)0$(2) 
AFormat = $(call smack0,$(call firstN,$(1),4),$(call lastN,$(1),5)) 
myFormat = $(if $(call hasA,$(1)),$(call AFormat,$(1)),$(1)) 
func9 = $(call myFormat,$(call lastN,$(1),9)) 

# AFormat = smack0 (firstN (string,4),lastN (string,5)) 
# myFormat = hasA (string) ? AFormat (string) : string 
# func9  = myFormat (last9 (string)) 

test: 
    @echo hasA  "(1234B66547) ->" $(call hasA,1234B66547) 
    @echo lastN "(RosieODonnellSuperManVelociraptor123456789,9) ->" $(call lastN ,RosieODonnellSuperManVelociraptor123456789,9) 
    @echo smack0 "(1234,0,ABCD) ->" $(call smack0,1234,ABCD) 
    @echo func9 "(S12a1234A5678) ->" $(call func9,S12a1234A5678) 
    @echo func9 "(S123a1234A5678) ->" $(call func9,S123a1234A5678) 
    @echo func9 "(S123123456789) ->" $(call func9,S123123456789) 

誠然,你可以認爲這是可以自動「func9」 &調用該W/$(shell func9 $(STR))但誰知道,也許你不希望打擾節省了微小的任務只是寫一個腳本 變化腳本,只有一些相關的使配方&你寧願將它保存在一些助手的生成文件。

- 歡呼!