2012-04-11 75 views
1

部分預處理這是我的make文件。而且,我正嘗試使用unifdef運行部分預處理。但執行unifdef後失敗。錯誤在生成文件

#HELLO = world 
HELLO_WORLD = $(HELLO) world! 
COMMA := , 
VAR_ARG_LIST_A := $(subst $(COMMA), ,$(VAR_ARG_LIST)) 
VAR_ARG_LIST_1 := $(word 1,$(VAR_ARG_LIST_A)) 
VAR_ARG_LIST_2 := $(word 2,$(VAR_ARG_LIST_A)) 
VAR_ARG_LIST_3 := $(word 3,$(VAR_ARG_LIST_A)) 
VAR_ARG_LIST_4 := $(word 4,$(VAR_ARG_LIST_A)) 
VAR_ARG_LIST_5 := $(word 5,$(VAR_ARG_LIST_A)) 
VAR_ARG_LIST_6 := $(word 6,$(VAR_ARG_LIST_A)) 
all: 
#  echo $(HELLO_WORLD) 
     echo $(VAR_ARG_LIST_1) 
#  echo $(VAR_ARG_LIST) 
     echo $(VAR_ARG_LIST_2) 
     echo $(VAR_ARG_LIST_3) 
     echo $(VAR_ARG_LIST_4) 
     echo $(VAR_ARG_LIST_5) 
     echo $(VAR_ARG_LIST_6) 
     unifdef -USW1 -USW2 -USW3 -USW4 -USW5 -USW6 -t file1.txt > file2.txt 

錯誤是

make VAR_ARG_LIST=AW1,AW2 
echo AW1 
AW1 
echo AW2 
AW2 
echo 

echo 

echo 

echo 

unifdef -USW1 -USW2 -USW3 -USW4 -USW5 -USW6 -t file1.txt > file2.txt 
make: *** [all] Error 1 

FILE1.TXT的內容是:

#ifdef SW1 
This is a file1 
#endif 
This is file file 1 
This is file file 2 
This is file file3 

FILE2.TXT的內容是:

This is file file 1 
This is file file 2 
This is file file3 

化妝執行unifdef之後失敗命令。

回答

1

如果你不關心unifdef的退出代碼,則只需確保配方符合真值退出。例如:

unifdef -USW1 -USW2 -USW3 -USW4 -USW5 -USW6 -t file1.txt > file2.txt || true 

將確保該行總是成功。

+0

+1不錯。我用'&& 0'弄亂了,但不記得'真'。 – Beta 2012-04-11 08:55:52

1

的問題是,unifdef離開與狀態1,如果該輸出從輸入的不同(即,如果這樣做任何事),而且使解釋一個非零狀態爲失敗和中止。你可以解決這個問題有一個連字符:

-unifdef -USW1 -USW2 -USW3 -USW4 -USW5 -USW6 -t file1.txt > file2.txt 

現在做將報告

make: [all] Error 1 (ignored) 

,並堅持下去。 (有可能會取消錯誤信息的一種方式,如果它讓你煩惱。)

+0

非常感謝。有效。我會嘗試找到一種方法來抑制錯誤信息。 – user1293997 2012-04-11 04:14:25

1

版本unifdef的2.7(這是在2013年3月發佈)的-x選項來控制的退出狀態的邏輯,所以它更起着很好地與化妝。您可能想使用-x1,make會確保unifdef確實進行了更改。見http://dotat.at/prog/unifdef/