2012-04-11 2 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 

오류은 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 

내용입니다 것은 : file2.txt의

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

내용은 다음과 같습니다

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'을 쳐서 들었지만'true'를 기억하지 못했습니다. – Beta

1

출력이 입력과 다르면 (즉, 아무것도 수행하지 않는 경우) unifdef가 상태 1로 종료되지만 Make는 0이 아닌 상태를 실패로 간주하고 중단합니다. 당신은 하이픈이 주위에 얻을 수 있습니다 :

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

을 지금

make: [all] Error 1 (ignored) 

를보고하고 계속합니다 확인하십시오.

+0

고마워요. 그것은 효과가 있었다. 오류 메시지를 표시하지 않는 방법을 찾으려고 노력할 것입니다. – user1293997

1

unifdef (2013 년 3 월에 릴리스 됨)의 버전 2.7에는 종료 상태 논리를 제어하는 ​​-x 옵션이있어서 make로 더 잘 재생됩니다. make가 unifdef가 실제로 변경되었는지 확인하도록 -x1을 사용할 수 있습니다. http://dotat.at/prog/unifdef/

관련 문제