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コマンドを実行した直後にmakeが失敗します。

4

3 に答える 3

1

問題は、出力が入力と異なる場合(つまり、何かを行う場合)、unifdefはステータス1で終了しますが、Makeはゼロ以外のステータスを失敗として解釈して中止することです。これはハイフンで回避できます。

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

今Makeは報告します

make: [all] Error 1 (ignored)

続けてください。(煩わしい場合は、エラーメッセージを抑制する方法があるかもしれません。)

于 2012-04-11T03:08:32.067 に答える
1

unifdef の終了コードを気にしない場合は、レシピ行が真の値で終了することを確認してください。例えば:

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

行が常に成功することを保証します。

于 2012-04-11T05:55:31.803 に答える
1

バージョン 2.7 の unifdef (2013 年 3 月にリリース) には、終了ステータス ロジックを制御する -x オプションがあるため、make との連携がよりうまくいきます。unifdef が実際に変更を行ったことを make が確認できるように、-x1 を使用することをお勧めします。http://dotat.at/prog/unifdef/を参照

于 2013-04-11T10:51:53.717 に答える